SQLite类大小写返回NULL
我试图运行一个查询来检查子字符串,当该子字符串存在时,我希望查询返回我选择的值 当COLUMNNAME(如“%”cashtag“:null%”时,我运行SELECT CASE,然后在TABLENAME中的COLUMNNAME结尾处运行“无现金标记” 我用不同的变量运行了相同的命令,效果很好。但是用这种方式编写它来查找“cashtag”:null我在查询结果中得到null的返回值 我提供了COLUMNAME中我的一个单元格的图像:SQLite类大小写返回NULL,sqlite,case,sql-like,Sqlite,Case,Sql Like,我试图运行一个查询来检查子字符串,当该子字符串存在时,我希望查询返回我选择的值 当COLUMNNAME(如“%”cashtag“:null%”时,我运行SELECT CASE,然后在TABLENAME中的COLUMNNAME结尾处运行“无现金标记” 我用不同的变量运行了相同的命令,效果很好。但是用这种方式编写它来查找“cashtag”:null我在查询结果中得到null的返回值 我提供了COLUMNAME中我的一个单元格的图像: 例如,对于这个特定的单元格,我希望在查询结果中返回NO CASH
例如,对于这个特定的单元格,我希望在查询结果中返回NO CASH标记。但它返回NULL。不确定这个特殊的“现金标签”是什么:空值,这是一个错误。正如我所说的,我使用了与CASE WHEN LIKE函数格式相似的其他值,它们工作得很好。我能想到的唯一可能发生这种情况是,如果
COLUMNAME
在子字符串““cashtag”:null”之前包含NUL字符(ASCII代码0
)
如果发生这种情况,SQLite的LIKE
操作符将无法定位NUL字符后面的子字符串。
例如:
SELECT 'abc' || char(0) || 'def' LIKE '%e%'
返回0
(FALSE
)。
但是:
返回1
(TRUE
)。
您可以通过以下方式检查NUL字符:
在任何情况下,请使用INSTR()
而不是像那样使用NUL字符:
这里唯一的区别是,默认情况下,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
现在的问题是UPPER()
只适用于字符串的ASCII字符,而不适用于ASCII范围以外的UNICODE字符。我不知道有类似运算符的NUL字符。现在这样做更有意义了。INSTR()命令工作正常。再次感谢你的帮助!
SELECT INSTR(COLUMNNAME, char(0)) [position of NUL char]
FROM TABLENAME
SELECT
CASE WHEN INSTR(COLUMNNAME, '"cashtag":null') THEN 'NO CASH TAG' END COLUMNNAME
FROM TABLENAME
SELECT
CASE WHEN INSTR(UPPER(COLUMNNAME), UPPER('"cashtag":null')) THEN 'NO CASH TAG' END COLUMNNAME
FROM TABLENAME