我正在慢慢学习如何使用填充语句,到目前为止它取得了一些小小的成功。
我使用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,这会产生影响吗?
有谁知道为什么会这样,我做错了什么?
帮助表示赞赏。
答案 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
与另一个字符串连接起来。如果我的解决方案不起作用,那么您的日期信息可能有问题。