SQLite类大小写返回NULL

SQLite类大小写返回NULL,sqlite,case,sql-like,Sqlite,Case,Sql Like,我试图运行一个查询来检查子字符串,当该子字符串存在时,我希望查询返回我选择的值 当COLUMNNAME(如“%”cashtag“:null%”时,我运行SELECT CASE,然后在TABLENAME中的COLUMNNAME结尾处运行“无现金标记” 我用不同的变量运行了相同的命令,效果很好。但是用这种方式编写它来查找“cashtag”:null我在查询结果中得到null的返回值 我提供了COLUMNAME中我的一个单元格的图像: 例如,对于这个特定的单元格,我希望在查询结果中返回NO CASH

我试图运行一个查询来检查子字符串,当该子字符串存在时,我希望查询返回我选择的值

当COLUMNNAME(如“%”cashtag“:null%”时,我运行SELECT CASE,然后在TABLENAME中的COLUMNNAME结尾处运行“无现金标记”

我用不同的变量运行了相同的命令,效果很好。但是用这种方式编写它来查找“cashtag”:null我在查询结果中得到null的返回值

我提供了COLUMNAME中我的一个单元格的图像:


例如,对于这个特定的单元格,我希望在查询结果中返回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