SQL字符串格式化程序

时间:2008-12-24 18:35:12

标签: sql linux formatting code-formatting

有没有人知道一个程序,一个实用程序或一些程序库,最好是Linux,它采用一个未格式化的SQL字符串并打印出来?

例如,我想要以下

select * from users where name = 'Paul'

改为这样的

select * 
from users
where
   name = 'Paul'

确切的格式并不重要。 我只需要一些东西来获取一个大的SQL字符串并将其分解成更具可读性的东西。

6 个答案:

答案 0 :(得分:50)

结帐sqlparse。它是一个安装命令sqlformat的Python模块。用法很简单,例如:

sqlformat --reindent --keywords upper --identifiers lower my_file.sql

我尝试了上述CLI替代方案,但是:

  • sqlinform 已经出局,因为我想要一个开源CLI应用程序。
  • fsqlf 只有少量功能(例如,create view缺失)。

感谢 sqlformat 我甚至了解到“REF”是reserved keyword in SQL:2011 and SQL:2008

答案 1 :(得分:10)

fsqlf(http://sourceforge.net/projects/fsqlf/)是一个命令行或GUI程序,开源,用于格式化SQL。它支持使用formatting.conf文件,该文件允许您在最终产品的外观方面具有很大的灵活性。

示例:

☺  [wwalker@speedy:~] 
$ echo "select f1, f2, fname, lName from tblName where f1 = true and fname is not null order by lName asc" | fsqlf 

SELECT
  f1
, f2
, fname
, lName
FROM tblName
WHERE f1=true
AND fname is not null
ORDER BY lName asc
☺  [wwalker@speedy:~] 
$ vim formatting.conf # 2 character change
☺  [wwalker@speedy:~] 
$ echo "select f1, f2, fname, lName from tblName where f1 = true and fname is not null order by lName asc" | fsqlf 

SELECT
 f1 ,
 f2 ,
 fname ,
 lName
FROM tblName
WHERE f1=true
AND fname is not null
ORDER BY lName asc
☺  [wwalker@speedy:~] 
$ vim formatting.conf # 1 character change
☺  [wwalker@speedy:~] 
$ echo "select f1, f2, fname, lName from tblName where f1 = true and fname is not null order by lName asc" | fsqlf 

SELECT
 f1 , f2 , fname , lName
FROM tblName
WHERE f1=true
AND fname is not null
ORDER BY lName asc
☺  [wwalker@speedy:~] 
$ 

答案 2 :(得分:5)

http://www.sqlinform.com/

此工具重新格式化SQL代码。我用它有很棒的结果。它作为一个webapp是免费的,并且也有一个可下载的版本。

答案 3 :(得分:3)

我喜欢使用http://www.dpriver.com - 它是SQL Server Management Studio的一个不错的插件。

答案 4 :(得分:1)

答案 5 :(得分:0)

并非我建议将(相对较大的)资金用于此目的,但Toad内置的功能完全符合您的要求。

它包含一系列选项,允许您准确设置SQL格式的方式(所有列在不同的行上等)。非常好,但只有你已经有了Toad。我知道Oracle版本会这样做,但我会假设SQL Server或其他版本也是如此。