若已知目标字段为数值型字段,则可使用ISNULL(目标字段,,'0') >= '3' 。
可现在目标字段的数据类型未知,需要对NULL值进行处理,
使用ISNULL(目标字段,,'') >= '3' ,系统提示异常:从数据类型 varchar 转换为 numeric 时出错。
使用ISNULL(CAST(目标字段 AS NVARCHAR),'') >= '3',虽然系统不报错,但检索结果不对。
不知哪位遇到过此问题?
------解决思路----------------------
ISNULL(CAST(目标字段 AS CHAR),'') >= 3
这样试试?
------解决思路----------------------
isnull(convert(char,'字段'),0)>3
------解决思路----------------------
首先,不知道字段类型是无法写出正确的SQL的。
其次,如果字段类型是文本,但是你要用数值进行比较,应该用 ISNULL(CAST(目标字段 AS int),0) >= 3;文本比较 '10' 是小于 '3' 的,检索结果当然“不对”了。
------解决思路----------------------
为什么不直接 目标字段 >= '3' 呢?NULL 转为空字符串还是不符合条件啊。
如果字段类型是字符串,是否字符串长度超过30了?你 CAST 没指定长度,默认就是30,超过部分被截断了。
------解决思路----------------------
为什么不直接 目标字段 >= '3' 呢?NULL 转为空字符串还是不符合条件啊。
如果字段类型是字符串,是否字符串长度超过30了?你 CAST 没指定长度,默认就是30,超过部分被截断了。
正解!没必要加ISNULL
------解决思路----------------------
不会错啊,数值自动转化为0了
;WITH a(nCol,sCol) AS (
SELECT 1,'1' UNION ALL
SELECT 3,'3' UNION ALL
SELECT 10,'10' UNION ALL
SELECT NULL,NULL
)
,b AS (
SELECT nCol, (CASE WHEN nCol IS NULL THEN '' ELSE nCol END) nCol2,
sCol, (CASE WHEN sCol IS NULL THEN '' ELSE sCol END) sCol2
FROM a
)
SELECT * FROM b
nCol nCol2 sCol sCol2
----------- ----------- ---- -----
1 1 1 1
3 3 3 3
10 10 10 10
NULL 0 NULL