我正在使用SQL Server 2000,我希望从此表中返回如下字符串:
Field1 | Field2 | Field3
ABC | 123 | abc
DEF | 456 | def
所需输出:
“ABC,123,ABC”
“DEF,456,DEF”
我相信我可以通过简单的连接来做到这一点,但感觉很麻烦。这样做的最佳方式是什么?
注意:这是一个简单的例子,实际使用有9个以上的字段,可能有空值。
答案 0 :(得分:1)
如上所述,您可以使用coalesce或简单连接。
选择Field1 +','+ Field2 +','+ Field3
请注意空值,如果Field1,2或3为null,则会得到Null结果,此行为可以是changed,但不建议这样做。
答案 1 :(得分:1)
尝试:
select
'"'
+ISNULL(CONVERT(varchar(1000),Field1),'null')
+ ',' + ISNULL(CONVERT(varchar(1000),Field2),'null')
+ ',' + ISNULL(CONVERT(varchar(1000),Field3),'null')
+'"' AS ResultColumn
from MyTable
根据需要调整每个1000
中的CONVERT(varchar(1000),
答案 2 :(得分:1)
没有人提到的一件事是,总是回到咬人的地方是如果你的分隔符(逗号)包含在数据字段中,那么你将有额外的逗号,你的数据将是模棱两可的。 (即“a,b,c,d”是否包含三个字段,或四个?如果第二个字段实际包含“b,c”,则导出格式不正确。)
随着时间的推移,CSV格式的应用略有不同,因此没有标准的方法来处理这种情况。我个人更喜欢处理它的方法是通过命名字段值,然后通过重复它们来转义引号。例如,您有一条包含以下数据的记录:
Field1:abc
Field2:def“1
Field3:12,“”3,b
CSV记录将写为:
"abc","def""1","12,""""3,b"
该格式避免了现场数据中所有可能的歧义。
将其解析回来既简单又具有确定性。另一种选择是使用您认为在实际字段数据中永远不会发生的字段分隔符。这是一种处理它的快速方法,但随后会在程序中留下一颗定时炸弹,供其他程序员稍后修复: - )
编辑:如果您不打算回读数据,那么,当然,您应该看到读取数据的程序如何处理导入包含分隔符字符的数据作为字段数据的一部分,不应将其解释为字段分隔符。
答案 3 :(得分:0)
最简单的是连接。请记住,为了理解,可读性和可维护性,请保持简单。不需要聪明的代码。
select (Field1 + ',' + Field2 + ',' + Field3) as result
from MyTable
这是一个链接:http://msdn.microsoft.com/en-us/library/aa276862(SQL.80).aspx
<强>备注强>
当您连接空值时,concat null会产生sp_dboption的null设置,或者SET CONCAT_NULL_YIELDS_NULL确定一个表达式为NULL时的行为。如果concat null产生null或SET CONCAT_NULL_YIELDS_NULL启用ON,则'string'+ NULL返回NULL。如果concat null产生null或禁用SET CONCAT_NULL_YIELDS_NULL,则结果为'string'。
答案 4 :(得分:0)
SELECT COALESCE(Field1,'''')+','+ COALESCE(Field2,'''')+','+ COALESCE(Field3,'''')FROM Table1 < / p>