2008-12-24 78 views
26

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

比如我想下面

select * from users where name = 'Paul' 

改成像这样

select * 
from users 
where 
    name = 'Paul' 

确切的格式并不重要。 我只需要一些东西来取一个大的SQL字符串,并把它分解成更可读的东西。

回答

8

http://www.sqlinform.com/

此工具重新格式化SQL代码。我用它与真棒结果。它作为一个web应用程序是免费的,并且有一个可下载的版本。

+1

当您粘贴敏感数据时,请小心此类网络应用程序。你相信它没有保存这些数据的副本吗? – 2016-10-07 08:31:29

+0

他们也有一个免费的在线格式化器 – Guido 2016-11-14 16:17:05

0

不是我建议花钱(相对较大)的钱只是为了这个目的,但Toad有一个内置的功能,正是你想要的。

它包括一堆选项,允许您准确设置您的SQL格式(所有列在不同的行上)等。相当不错,但只有当你已经有蟾蜍。我知道Oracle版本这样做,但我会假设SQL Server或其他版本。

3

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

+2

一个宠物peeve - 为什么SSMS现在没有代码格式? – 2010-05-21 06:38:24

8

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

例子:

☺ [[email protected]:~] 
$ 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 
☺ [[email protected]:~] 
$ vim formatting.conf # 2 character change 
☺ [[email protected]:~] 
$ 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 
☺ [[email protected]:~] 
$ vim formatting.conf # 1 character change 
☺ [[email protected]:~] 
$ 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 
☺ [[email protected]:~] 
$ 
+2

这是最好的答案!因为您可以使用开源工具在自己的机器上格式化SQL查询,而无需使用第三方网站或专有工具!隐藏数据保留和隐私政策! – bitek 2014-07-24 07:52:35

33

退房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