排序规则

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 运算符的实现的详细信息,请参阅用户定义的函数

另请参阅