2008-12-24 119 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