我在SQLite数据库中有一个带有数据类型文本的表,但是当我进行比较时,如果我这样做它就不起作用了:
select * from scanned_dbs where db = 'cdd_db';
但如果我将查询更改为:
select * from scanned_dbs where db like 'cdd_db';
有效。但是,正如valex所指出的那样它也会匹配cddAdb,cddBdb,......等等,所以这不是正确的方法。
我找到的另一种方法是:
select * from scanned_dbs where cast(db as varchar) = 'cdd_db';
所以任何人都可以告诉我为什么这是有效的而不是第一个直接比较......
答案 0 :(得分:3)
Because下划线(“_”)匹配字符串中的任何单个字符。
因此,当您使用db = 'cdd_db'
时,唯一匹配的db
值就是'cdd_db'
。但是,当您使用LIKE运算符db like 'cdd_db'
时,“_”符号就是一种模式,因此db
值匹配:cddAdb,cddBdb,cddcdb,cddddb,cdd1db, ....