2011-06-06 96 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