SQLite 在比较 TEXT 值时使用排序序列确定顺序和相等性。 可以在创建列或在 SQL 查询的每个操作中指定要使用的排序规则。 SQLite 默认包含三个排序序列。
排序规则 | DESCRIPTION |
---|---|
RTRIM | 忽略尾随空格 |
NOCASE | 对于 ASCII 字符 A-Z 不区分大小写 |
二进制 | 区分大小写。 直接比较字节 |
自定义排序规则
还可以定义自己的排序顺序,或者使用 CreateCollation替代内置序列。 以下示例演示如何重写 NOCASE 排序规则以支持 Unicode 字符。 GitHub 上提供了 完整的示例代码 。
connection.CreateCollation("NOCASE", (x, y) => string.Compare(x, y, ignoreCase: true));
var queryCommand = connection.CreateCommand();
queryCommand.CommandText =
@"
SELECT count()
FROM greek_letter
WHERE value = 'λ' COLLATE NOCASE
";
var oCount = queryCommand.ExecuteScalar();
var count = (oCount is not null) ? (int)oCount : -1;
Like 运算符
SQLite 中的 LIKE 运算符不遵循排序规则。 默认实现的语义与 NOCASE 排序规则相同。 只对 ASCII 字符 A 到 Z 不区分大小写。
可以使用以下 pragma 语句轻松地使 LIKE 运算符区分大小写:
PRAGMA case_sensitive_like = 1
有关替代 LIKE 运算符的实现的详细信息,请参阅用户定义的函数。