2011-06-06 416 views
17

後,我運行一個查詢並查看輸出,例如插入雙引號到SQL輸出

select * from People

我的輸出如下

First Last  Email 
Ray  Smith  [email protected] 

我怎麼會導出此數據,以便它看起來如下?

"Ray","Smith","[email protected]" 

或者有沒有辦法在SQL中做到這一點,以修改記錄以包含引號?

因爲當你輸出時,無論如何都會包含逗號,對不對?

+4

我不知道誰upvoted關於修改*記錄*包含引號的問題,所以它是「更容易」出口到CSV ... – Blindy 2011-06-06 14:51:58

+1

出口到CSV - http://stackoverflow.com/questions/425379/how-to -export-data-as-csv-format-from-sql-server-using-sqlcmd – 2011-06-06 15:00:53

+0

我同意@Bindy在他的評論中所暗示的含義:不要更改記錄以使導出爲CSV更容易。您將最終得到超過您討價還價的聲明,如 'select * from people where'Last'like''Ander%'''' 您的SQL風格是否會執行CSV導出?他們中的很多人都會這樣做,並且您會發現使用內置導出功能而不是自行滾動更容易。如果您使用的是Microsoft T-SQL,請查看http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=87448以獲取導出爲CSV的腳本。 – rajah9 2011-06-06 15:08:58

回答

20

如果你感興趣的列是128個字符以內,你可以使用QUOTENAME功能。請注意這一點,因爲超過128個字符將返回NULL

SELECT QUOTENAME(First, '"'), QUOTENAME(Last, '"'), QUOTENAME(Email, '"') 
    FROM People 
+0

我想他希望輸出在一列中,用逗號分隔。 – Blindy 2011-06-06 14:55:44

+0

@布林迪:目前尚不清楚。在這個問題中,OP聲明:「因爲當你輸出時,無論如何都會包含逗號」。 – 2011-06-06 14:57:20

+0

@布林迪 - 我認爲他希望他們分開列。 – 2011-06-06 14:57:53

3
select '"'+first+'","'+last+'","'+email+'"' 
from people 

這是什麼樣的事情但是在代碼中最好的做法,你應該爲呈現查詢

+0

非常強烈的聲明。有時候在SQL中格式化非常有用,允許從記錄集到綁定控件的直接傳輸。另一個例子是SQL服務器中用於轉儲文件的GUI工具,其中所查詢的內容最終在文件中出現,因此所有格式必須在SQL中完成。 – mike 2016-08-17 20:23:46

+0

第一個例子正是我所說的,它不是數據庫層的工作,以確保您的視圖顯示正確的數據,它是呈現它所接收的結構化數據的視圖的工作。例如,在WPF中,這將通過綁定到模型並使用轉換器完成。我同意,第二個例子是一個例外,因爲您將SQL語句用作應用程序本身,而不僅僅是它的一層。 – Blindy 2016-08-18 14:11:37

2

選擇CONCAT(「\ 「」,第一,「\」」,「\ 「」,最後,「\」」,「\ 「」,電子郵件,「\」」)作爲ALLINONE

+0

在SQL Server中不起作用。 – 2011-06-06 14:58:54

+0

對不起 - 但SQL應該是相同的 - 只是函數名稱的差異 – Mike 2011-06-06 15:00:38

+0

只適用於SQL 2012,2008沒有concat函數。 – Fourth 2013-07-23 13:26:57

1

修改包含引號的記錄將是一場災難;您不要僅將數據用於導出。此外,理論上你必須處理如下名稱:

Thomas "The Alley Cat" O'Malley 

其中存在一些問題。

在標準SQL,你會使用翻番,達到單引號括單引號(與雙引號沒有特殊待遇):

'"Thomas "The Alley Cat" O''Malley"' 

某些DBMS允許你使用字串,雙引號(以標準SQL中,雙引號表示一個「分隔標識符」; SQL Server使用方括號爲),在這種情況下,你可能會寫的字符串:

"""Thomas ""The Alley Cat"" O'Malley""" 

通常情況下,雖然,你的出口工具提供CSV輸出格式你的SQL語句不需要工作關於它。嵌入式引號使其他問題成爲問題。事實上,你通常不應該讓DBMS處理數據的格式。

0

這個工作最適合我

SELECT 'UPDATE [dbo].[DirTree1] SET FLD2UPDATE=',QUOTENAME(FLD2UPDATE,'''') 
+' WHERE KEYFLD='+QUOTENAME(KEYFLD,'''') 
FROM [dbo].[Table1] 
WHERE SUBSTRING(FLD2UPDATE,1,2) = 'MX' 
order by 2 
0

如果您正在使用MS SQL Server中,你可以試試:

SELECT '"'||Table.Column||'"' 
    FROM Table 

- 請注意, 「選擇」 和「之間的第3個字符| |」是: ''''

- 字符在「||」結尾後是相同的......這樣你就可以在你的價值的每一面上得到一個「。

+0

許多錯誤,你使用簡單的引號,然後雙引號,你說有空格,沒有......難以遵循。 – Fabien 2017-07-13 22:20:33

+0

歡迎來到Stack Overflow。用四個空格縮進的行顯示爲代碼 - 作爲文字值。這很方便,你不必解釋哪些角色會去哪裏。 – 2017-07-13 22:32:56

+0

現在編輯答案@Fabien如果需要更多的工作才能正確,請指出任何剩餘的錯誤。 – 2017-07-14 00:23:08