如何解决SQLite CASE LIKE 返回 NULL
我正在尝试运行查询以检查子字符串,当该子字符串存在时,我希望查询返回我选择的值。
我运行 SELECT CASE WHEN COLUMNNAME LIKE '%"cashtag":null%' THEN 'NO CASH TAG' END COLUMNNAME FROM TABLENAME
我用不同的变量运行了这个相同的命令,它运行良好。但是通过这种方式来查找 "cashtag":null 我在查询结果中得到了 NULL 的返回值。
例如,对于这个特定的单元格,我希望在我的查询结果中得到 NO CASH TAG 的返回。但它返回NULL。不确定这个特定的“现金标签”是什么:空值正在抛出问题。正如我所说,我在 CASE WHEN LIKE 函数中使用了具有类似格式的其他值,并且它们工作得很好。
解决方法
我能想到的唯一可能发生的情况是,如果 data
在子字符串 COLUMNAME
之前包含 NUL 字符(ASCII 代码 0
)。
如果发生这种情况,SQLite 的 '"cashtag":null'
运算符无法定位 NUL 字符之后的子字符串。
例如:
LIKE
返回 SELECT 'abc' || char(0) || 'def' LIKE '%e%'
(0
)。
但是:
FALSE
返回 SELECT 'abc' || char(0) || 'def' LIKE '%a%'
(1
)。
您可以使用以下命令检查 NUL 字符:
TRUE
在任何情况下,使用 SELECT INSTR(COLUMNNAME,char(0)) [position of NUL char]
FROM TABLENAME
代替 INSTR()
,即使使用 NUL 字符:
LIKE
这里唯一的区别是 SELECT
CASE WHEN INSTR(COLUMNNAME,'"cashtag":null') THEN 'NO CASH TAG' END COLUMNNAME
FROM TABLENAME
默认不区分大小写,但 LIKE
区分大小写。
所以 INSTR()
不会找到 INSTR(COLUMNNAME,'"cashtag":null')
。
如果您需要不区分大小写的搜索,也可以使用 '"Cashtag":NULL'
函数:
UPPER()
现在的问题是 SELECT
CASE WHEN INSTR(UPPER(COLUMNNAME),UPPER('"cashtag":null')) THEN 'NO CASH TAG' END COLUMNNAME
FROM TABLENAME
仅适用于字符串的 ASCII 字符,而不适用于超出 ASCII 范围的 UNICODE 字符。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。