【发布时间】:2015-08-17 13:02:09
【问题描述】:
使用下面的代码在“>”附近给出了错误的语法,Long 字段中的数据如下所示:
Review Body 3,
Review body 6,
Aprentice,
我已经在圈子里转了几个小时来整理这个,是不是因为我在计算中使用了文本函数(右)。
SELECT TOP 1000 [Id]
,[Short]
,[Long]
,CASE ISNUMERIC(RIGHT( grade.Long , 1 )) WHEN cast(RIGHT( shiftname.Long , 1 )as int) > 4 THEN 'Qualified' ELSE 'Unqualified' END as Grade
FROM [RosterPro_Live].[dbo].[lookup_PostGrade] as grade
【问题讨论】:
-
你能给一些ddl吗?什么是 shiftname?
-
ISNUMERIC返回 1 或 0,所以我不明白WHEN之后的部分 -
您正在混合 CASE 语法变体。要么你有
CASE expression WHEN value THEN ... WHEN othervalue THEN ...或CASE WHEN expression THEN ... WHEN otherexpression THEN ...。您不能同时提供 CASE 之后的表达式和 WHEN 之后的表达式(除非 WHEN 之后的表达式产生与 CASE 之后的表达式相对应的值)。 -
所以,你检查
grade.Long的最后一个字符是否可以转换为任何数字类型,然后尝试将cast一个不同列最右边的字符转换为int?此外,ISNUMERIC很少(如果有的话)是任何问题的正确解决方案。
标签: sql-server tsql casting sql-server-2008-r2 case