【发布时间】:2019-01-29 11:42:09
【问题描述】:
我正在尝试使用 SQL Server 2016 中的 STUFF 功能来选择 DATE 信息并将其返回到表中。有时会有多个日期返回。我已经使用 STUFF 来获取我需要的其他数据。
Email = STUFF((SELECT ', ' + [Value]
FROM EmailTable
WHERE ID = r.ID AND EmailType = 1
FOR XML PATH(''),TYPE).value('(./text())[1]','NVARCHAR(MAX)'),1,2,'')
这可以在适用的情况下返回多封电子邮件并且工作正常。现在的问题是我想做同样的事情,但要使用 DATE。
Date = STUFF((SELECT ', ' + DateValue
FROM DateTable
WHERE ID = r.ID
FOR XML PATH(''),TYPE).value('(./text())[1]','DATE'),1,2,'')
上面的代码sn-ps只是例子,表名和变量名在现实中是不同的,但它们应该能传达我的意思。
最后一个代码sn-p的错误是因为'+'符号它不起作用。如果我把逗号加出来,我可以让它返回 DATE,但它们被包裹在 XML 标记中。
它还必须返回一个 DATE 值,它不能转换为 NVARCHAR。
我不确定我所追求的是否可行,但我想我会问。
如果需要更多信息,请询问。
【问题讨论】:
-
您正在尝试连接字符串,而不是将
STUFF与DATE一起使用。 SQL Server 2017 引入了 STRING_AGG,因此无需使用此类字符串连接技术。 -
你能分享示例输入和所需的输出
-
@Panagiotis 目前我无法使用 SQL Server 2017。
-
由于您想连接字符串,并且不想让日期格式留给机会,请使用
FORMAT()将日期格式化为您想要的字符串 -
“它还必须返回一个 DATE 值”——“它”指的是什么?您将一堆日期连接成一个字符串。不管怎样,这不会是一个单一的
DATE值。添加更多输入和所需输出可能会有所帮助。
标签: sql sql-server date sql-server-2017 sql-server-group-concat