我有两条记录,我想在SQL服务器中填充日期。
CREATE TABLE #TEMP1
(
SALE_DT DATETIME,
ID INT
)
INSERT INTO #TEMP1 VALUES ('1/12/2011 12:00 AM','12345')
INSERT INTO #TEMP1 VALUES ('3/11/2011 12:00 AM','12345')
当我尝试下面的查询时,我有一个“将varchar数据类型转换为日期时间数据类型导致超出范围的值。”
SELECT
STUFF(ISNULL((SELECT ', ' + X.SALE_DT
FROM #TEMP1 X WHERE X.ID = T.ID
GROUP BY X.SALE_DT FOR XML PATH ('')), ''), 1, 2, '') AS DATES
FROM #TEMP1 T
当我尝试下面的查询时,我能够填写日期,但结果不是我想要的
SELECT DISTINCT
STUFF(ISNULL((SELECT ', ' + CONVERT(VARCHAR, X.SALE_DT)
FROM #TEMP1 X WHERE X.ID = T.ID
GROUP BY X.SALE_DT FOR XML PATH ('')), ''), 1, 2, '') AS DATES,
ID
FROM #TEMP1 T
我希望我的结果如下:
SALE_DT ID
1/12/2011, 3/11/2011 12345
答案 0 :(得分:2)
我认为这应该做你想要的:
SELECT ID,
STUFF( (SELECT ', ' + CONVERT(VARCHAR(10), X.SALE_DT)
FROM #TEMP1 X
WHERE X.ID = T.ID
FOR XML PATH ('')
), 1, 2, ''
) AS DATES
FROM (SELECT DISTINCT ID FROM #TEMP1 T) T;
注意:
VARCHAR
的长度。默认长度因上下文而异,可能不够。GROUP BY
。在这种情况下,我更倾向于使用SELECT DISTINCT
,但他们做同样的事情。NULL
值。当然,如果你真的想避免使用COALESCE()
,你可以使用NULL
。SELECT DISTINCT ID
应该是性能优化 - 子查询每id
只运行一次。VARCHAR(10)
只会在您拥有的国际化设置中带回日期。您可能应该使用FORMAT()
或显式转换代码。