SQL Server,DATEDIFF错误,日期字段的格式?

时间:2013-11-15 14:07:15

标签: sql sql-server datediff

我的约会声明中有错误。评论dateiff& 'Nothing clicked'位工作正常。我认为它与日期变量的格式有关。

错误消息..

Msg 245,Level 16,State 1,Line 2 将varchar值'Nothing clicked'转换为数据类型int时,转换失败。

select

case 
when stVs.DateLastAction is null then 'Nothing clicked'
else DATEDIFF(MI,StVs.DateSessionStarted,stVs.DateLastAction)
end as test

From Stats_VisitorSessions StVs

2 个答案:

答案 0 :(得分:5)

尝试:

select
case 
when stVs.DateLastAction is null then 'Nothing clicked'
else CONVERT(varchar(30),DATEDIFF(MI,StVs.DateSessionStarted,stVs.DateLastAction))
--   ^^^^^^^^^^^^^^^^^^^^                                                        ^
end as test

From Stats_VisitorSessions StVs

如果test结果集列是数字或字符串,则TSQL很难解析。

CASE表达式只能返回一种数据类型。它不能同时返回数字和字符串数据类型。在OP的情况下,它决定一个数字数据类型,然后它处理更多的行,并发现它需要是一个字符串,它失败。请参阅Data type precedence

答案 1 :(得分:3)

此处的问题是CASE表达式中的不同数据类型。添加CAST,一切都应该有效:

select

case 
when stVs.DateLastAction is null then 'Nothing clicked'
else CAST(DATEDIFF(MI,StVs.DateSessionStarted,stVs.DateLastAction) AS varchar)
end as test

From Stats_VisitorSessions StVs

另一种选择是返回NULL而不是消息,让应用程序处理这种情况。