SQL STUFF DATETIME不会返回所有值

SQL STUFF DATETIME不会返回所有值,sql,sql-server,tsql,Sql,Sql Server,Tsql,我试图使用STUFF函数将特定行的文本合并到一个单元格中。它对VARCHAR值很好,但是当我使用带有DATETIME值的STUFF时,我收到一个错误:将VARCHAR数据类型转换为DATETIME数据类型导致值超出范围。 我试图强制转换该值,但它没有返回我期望的值 我试图在每个CreatedDate行中返回的内容如下 2016年3月29日上午9:42、2016年3月31日上午9:42、2016年3月31日上午9:43 但它只显示其中一个值。 以下是我的部分疑问: SELECT [KEY] ,S

我试图使用STUFF函数将特定行的文本合并到一个单元格中。它对VARCHAR值很好,但是当我使用带有DATETIME值的STUFF时,我收到一个错误:将VARCHAR数据类型转换为DATETIME数据类型导致值超出范围。 我试图强制转换该值,但它没有返回我期望的值

我试图在每个CreatedDate行中返回的内容如下

2016年3月29日上午9:42、2016年3月31日上午9:42、2016年3月31日上午9:43

但它只显示其中一个值。 以下是我的部分疑问:

SELECT
[KEY] 
,STUFF((SELECT distinct ', ' + [Code] FROM #tempTable t WHERE t.[KEY]=tt.[KEY] FOR XML PATH('')),1,1,'') AS [Code] 
,STUFF((SELECT distinct ', ' + CAST([CreatedDate] AS NVARCHAR(100)) FROM #tempTable t WHERE t.[KEY]=tt.[KEY] FOR XML PATH('')),1,1,'') AS [CreatedDate] 
FROM #tempTable tt
Group by KEY 

似乎有一部分问题不在问题中..下面是repo.进一步的东西不会给你带来任何问题

-这很有效

declare  @dt table
(
id datetime
)
insert into @dt
select 'Mar 29 2016 9:42AM' union
select 'Mar 31 2016 9:42AM' union select  'Mar 31 2016 9:43AM'

select  id,stuff((select ','+ convert(varchar,id) from @dt
for xml path('')),1,1,'')
from @dt
-这显然不起作用,您在查询中也没有这样做

declare  @dt table
(
id datetime
)
insert into @dt
select 'Mar 29 2016 9:42AM' union
select 'Mar 31 2016 9:42AM' union select  'Mar 31 2016 9:43AM'

select  id,stuff((select ','+ id from @dt
for xml path('')),1,1,'')
from @dt
在您的问题中似乎有一些地方没有显示,您将datetime存储为varchar,而在将其转换为datetime时,它失败了


Stuff不会导致任何值被截断,如果看到的值较少,则应单独查看联接列

如果忘记Stuff函数,只需选择cast createdDate as nvarchar 100,会发生什么情况?您是否可以给出示例创建日期值我有一个键值12345,该特定键值有三条记录。键12345的第一条记录的日期是2016年3月29日9:42AM,第二条记录的日期是2016年3月31日9:42AM,第三条记录的日期是2016年3月31日9:43AM。是否有查询的另一部分可能试图从VARCHAR转换为DATETIME?不,这是我在查询中的唯一转换。