【发布时间】:2014-01-17 11:13:20
【问题描述】:
我在使用CASE 语句时遇到了一些问题,因为将值从VARCHAR 转换为INT 时出现错误。我知道这是由于优先级限制,要修复我需要CONVERT/CAST 我的值之一,我无法确定要转换哪个值。
这个original post 把我推向了正确的方向,只是敲了敲我的脑袋想办法。
UPDATE Table1
SET IntField = ( CASE WHEN ( VARCHARField = 0
OR VARCHARField = 1
OR VARCHARField = 2
OR VARCHARField = 3
) THEN 0
WHEN ( VARCHARField = 4
OR VARCHARField = 5
OR VARCHARField = 6
OR VARCHARField = 7
) THEN 1
WHEN ( VARCHARField = 8
OR VARCHARField = 9
) THEN 2
WHEN ( VARCHARField = 'N' ) THEN 3
ELSE 0
END )
错误:
消息 245,第 16 级,状态 1,第 1 行
将 varchar 值“N”转换为数据类型 int 时转换失败。
任何帮助将不胜感激。
【问题讨论】:
-
您为什么不进行这样的比较:
WHEN (VARCHARField = '0' OR VARCHARField = '1' ...和VARCHARField,嗯,VARCHAR? -
谢谢@EfrainReyes - 这就是问题所在。
标签: sql sql-server tsql sql-server-2012 case