为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8
【操作系统】:
【CPU】:
【问题描述】*:
请教个问题,INTEGER字段F_CORP_USER_ID != '',导致数据筛选不出来,这个有什么办法可以兼容吗?
把你在某个数据库执行结果贴出来
你看看这样解释是否可以理解:
因为 F_CORP_USER_ID 字段类型是INTEGER,所以条件参数为字符串时,要作类型转换。
在空字符串 '' 转换为 INTEGER 后,转换结果是NULL,而不是0 ,包括空格字符 ‘ ’ 也一样,这样等效的SQL就成了:
WHERE F_CORP_USER_ID IS NOT NULL
AND F_CORP_USER_ID != NULL
而针对NULL进行比较操作时,除 IS NULL / IS NOT NULL 外,其他比较操作的结果都是FALSE,也就是“任意值都不等于NULL,包括 NULL本身也不等于NULL”,这样就造成查询不到数据的结果了。
你可以用下面这个SQL作个测试,能否发现空字符串和空格字符串转换为INT后的结果就是NULL,而且貌似与兼容模式无关,我测试了0、1、2、4、7这几种兼容模式,转换结果都是一样的。
SELECT PARA_NAME
,PARA_VALUE
,CASE WHEN CAST('' AS INT) IS NULL THEN 1 ELSE 0 END
,CASE WHEN CAST(' ' AS INT) IS NULL THEN 1 ELSE 0 END
FROM V$DM_INI
WHERE PARA_NAME = 'COMPATIBLE_MODE'
在''的中间添加一个空格,再查询试试