T-SQL:将Stuff语句与Dates一起使用会导致转换错误

时间:2018-02-14 01:49:28

标签: date

我正在慢慢学习如何使用填充语句,到目前为止它取得了一些小小的成功。

我使用stuff在一行中填充一列,所有值都匹配。

例如

 SELECT table1.ID, STUFF((SELECT ',' + table2.Value
            FROM Table1 WITH (NOLOCK)
            WHERE Table1.id = table2.id 
            FOR XML PATH('')), 1, 1, NULL) AS [concat_values]
from table1, table2
where table1.id = table2.id
and table1.status = 'Open'

以上作品很棒...但是当我使用日期时,我碰到了一堵砖墙。

例如

 SELECT table1.ID, STUFF((SELECT ',' + table2.Date
            FROM Table1 WITH (NOLOCK)
            WHERE Table1.id = table2.id 
            FOR XML PATH('')), 1, 1, NULL) AS [concat_dates]
from table1, table2
where table1.id = table2.id
and table1.status = 'Open'

我得到了一个#34;将varchar数据类型转换为日期时间数据类型会导致超出范围的值。"错误,第一行。

数据库中的日期应为YYYY / MM / DD,但是显示为YYYY / MM / DD 00:00:00.000,这会产生影响吗?

有谁知道为什么会这样,我做错了什么?

帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

尝试将您的通话中的日期转换为varchar STUFF

 SELECT
    t1.ID,
    STUFF((SELECT ',' + CONVERT(varchar, table2.Date, 120)
           FROM Table1 WITH (NOLOCK)
           WHERE Table1.id = t2.id 
           FOR XML PATH('')), 1, 1, NULL) AS [concat_dates]
FROM table1 t1
INNER JOIN table2 t2
    ON t1.id = t2.id
WHERE t1.status = 'Open'

问题在于,当您说',' + table2.Date时,您告诉SQL Server将t2.Date与另一个字符串连接起来。如果我的解决方案不起作用,那么您的日期信息可能有问题。