【发布时间】:2013-08-02 05:10:47
【问题描述】:
我试图让下面的代码工作,单独的两段代码(在WHEN 部分和ELSE 部分)工作,但是当在这个CASE 语句中使用时我得到一个错误
“'CAST' 附近的语法不正确,应为 'AS'。”错误。
基本上,如果WHEN 语句代码等于或大于24,则使用THEN 语句,如果它小于24,则使用ELSE 语句。
在尝试了几个小时后,我似乎无法让它工作,任何关于我哪里出错的迹象将不胜感激。
SELECT CASE
WHEN
(convert(float,datediff(mi, start_work, end_work))/60) >= '24'
THEN
(convert(float,datediff(mi, start_work, end_work))/60)
ELSE
(CAST(convert(varchar(2), dateadd(minute, datediff(minute, start_time, end_time), 0), 114)
* 60 + RIGHT (convert(varchar(5), dateadd(minute, datediff(minute, start_time, end_time), 0), 114),
CASE WHEN CHARINDEX(':',convert(varchar(5), dateadd(minute, datediff(minute, start_time, end_time), 0), 114)) > 0
THEN LEN(convert(varchar(5), dateadd(minute, datediff(minute, start_time, end_time), 0), 114))-3
ELSE LEN(convert(varchar(5), dateadd(minute, datediff(minute, start_time, end_time), 0), 114))
END) AS decimal) / 60
FROM NDB.dbo.statusa
INNER JOIN NDB.dbo.details ON statusa.vkey = details.vkey
INNER JOIN NDB.dbo.chegu ON statusa.ckey = NDB.dbo.chegu.gkey
WHERE start_time!= end_time AND string1 = Visit_Id and NDB.dbo.chegu.name = 'loft'
AS [Working]
【问题讨论】:
-
(convert(float,datediff(mi, start_work, end_work))/60) >= '24' 不应在 24 左右加上引号。
标签: sql sql-server tsql syntax case