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