它可能是双重的,但是搜索" Python sqlite区分大小写,如#34;无法获得任何结果。
我在python 2.7上的sqlite 3模型中遇到了区分大小写LIKE查询的问题。问题看起来像这样:LIKE with%是不区分大小写的。
这是一个例子:
import sqlite3
db = sqlite3.connect("test.db")
db.execute("""CREATE TABLE IF NOT EXISTS rec(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT );""")
db.commit()
for name in "ABC", "abc", "Abc", "aBC":
db.execute("INSERT INTO rec(name) VALUES(?);",(name,))
print "A%",db.execute("SELECT name FROM rec WHERE name LIKE ?;",("A%",)).fetchall()
print "a%",db.execute("SELECT name FROM rec WHERE name LIKE ?;",("a%",)).fetchall()
结果令人惊讶:
A% [(u'ABC',), (u'abc',), (u'Abc',), (u'aBC',)]
a% [(u'ABC',), (u'abc',), (u'Abc',), (u'aBC',)]
是否可以告诉sqlite区分大小写?
答案 0 :(得分:3)
首先必须执行SQL语句"PRAGMA case_sensitive_like = on"
,然后才能运行。
答案 1 :(得分:1)
GLOB 运算符可能就是您想要的。
GLOB运算符类似于LIKE但使用Unix文件通配符 其通配符的语法。此外, GLOB区分大小写,与LIKE不同。
*
, ?
和 […]
(如反对LIKE的%
和_
)。所以: -
print "A*",db.execute("SELECT name FROM rec WHERE name GLOB ?;",("A*",)).fetchall()
print "a*",db.execute("SELECT name FROM rec WHERE name GLOB ?;",("a*",)).fetchall()
应该不那么令人惊讶并导致: -
A% [(u'ABC',), (u'Abc',)]
a% [(u'abc',), (u'aBC',)]