请教算法高手一起讨论sql语句自动格式化的算法

果然如此 2009-11-21 01:49:46
比如下面sql语句,看起来很乱,不容易看懂:
SELECT column_name(s) FROM table_name1 LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name where name='a' or x='d'


做一个winform程序,使这些sql语句以标准化的格式显示,就和vs编辑器一样,自动格式化这些sql语句:


SELECT
column_name(s)
FROM
table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
where
name='a'
or x='d'

请问有什么好的算法?
...全文
243 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
果然如此 2009-11-21
  • 打赏
  • 举报
回复
谢谢wanghui0380
1.SQL Assistant这个工具前几天安装了,刚才试了一下,自动提示功能还是不错的,

2.BNF规则有时间研究一下。
wanghui0380 2009-11-21
  • 打赏
  • 举报
回复
突然想起另外一个东西了 ,前两天在infoQ上看了一篇东西,好像是一种基于BNF规则推导,一个可自定义语言的库,我想可以一用。

好像是irony
去官方(http://irony.codeplex.com/)看了一下的确可以解决你的问题,官方本身就提供了一个sql语法探测的例子
wanghui0380 2009-11-21
  • 打赏
  • 举报
回复
这个是个麻烦的事情,理论上标准解决方法是 先去国际标准化组织获取,sql的BNF文档格式说明,然后根据这个bnf文档解析。
http://savage.net.au/SQL/sql-2003-2.bnf.html(sql 2003版bnf文件说明)

不过应该有相对简单的方法,如果我没记错的话 SQL Assistant这个工具提供了相关的格式库,而且你可以基于他做二次开发。我想可以试一下

具体的东西可以 google:SQL Assistant API
果然如此 2009-11-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mbh0210 的回复:]
试试正则表达式吧
[/Quote]
正则表达式只能查找到需要的关键字,我那种方法也可以实现
现在的难点是格式化
mbh0210 2009-11-21
  • 打赏
  • 举报
回复
试试正则表达式吧
果然如此 2009-11-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mbh0210 的回复:]
只能是根据Sql语句以及关键字进行分析解析,增加适当的缩进
[/Quote]

这个我知道,我想到的方法是用空格分隔,取出关键字,简单的还可以,但如果遇到括号或单引号括起的字符串就不好弄了。

有没有具体怎么分析的好方法?
mbh0210 2009-11-21
  • 打赏
  • 举报
回复
只能是根据Sql语句以及关键字进行分析解析,增加适当的缩进

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧