Mat*_*att 11 sql t-sql sql-server syntax case
我试图让下面的代码工作,单独的两个代码(在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]
Run Code Online (Sandbox Code Playgroud)
gef*_*fei 14
你需要结束你的case陈述
case when ... then ... else ... end
Run Code Online (Sandbox Code Playgroud)
小智 5
没有右括号.
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)
Run Code Online (Sandbox Code Playgroud)
未公开的括号和案例陈述需要END.
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
END
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]
Run Code Online (Sandbox Code Playgroud)
我意识到这个答案为时已晚,无法获得奖励.但你的脚本太长了.这将与您尝试实现的完全相同,修复代码中的错误,只是修补错误的代码:
SELECT
datediff(mi, 0, end_time - start_time)/60.0%24
FROM
....
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8276 次 |
| 最近记录: |