我的约会声明中有错误。评论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
答案 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
而不是消息,让应用程序处理这种情况。