首页 > 解决方案 > 将 STUFF 与 DATE 一起使用

问题描述

我正在尝试使用 SQL Server 2016 中的 STUFF 功能来选择日期信息并将其返回到表中。有时会有多个日期返回。我已经使用 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,'')  

上面的代码片段只是示例,表名和变量名实际上是不同的,但它们应该传达我的意思。

最后一个代码片段的错误是由于“+”符号而无法工作。如果我把逗号加出来,我可以让它返回日期,但它们被包装在 XML 标记中。

它还必须返回一个 DATE 值,它不能转换为 NVARCHAR。

我不确定我所追求的是否可行,但我想我会问。

如果需要更多信息,请询问。

标签: sqlsql-serverdatesql-server-2017sql-server-group-concat

解决方案


评论太长了。

您的代码不能在单个列中返回多个日期值。SQL Server 不提供数组类型——或它们的等价物。

什么FOR XML PATH是产生一个字符串。该字符串被格式化为 XML,但它仍然是一个字符串。在字符串中,您可以识别属性的类型。但是,表示形式是字符串。

您可以做的最好的是将日期存储为 YYYY-MM-DD 或 YYYYMMDD,这很容易在 SQL Server(以及几乎任何其他软件)中转换为日期。


推荐阅读