根据字符范围选择字符串字段的最佳方法是什么?

Nat*_*lch 5 sql sql-server oracle localization collation

我需要为我的软件用户添加按字符范围选择记录的功能.
如何编写一个查询,从名称落在Ba-Bi范围内的表中返回所有小部件?

目前我使用的是大于和小于运算符,因此上面的示例将变为:

select * from widget
where name >= 'ba' and name < 'bj'
Run Code Online (Sandbox Code Playgroud)

请注意我是如何"增加"从i到j的上限的最后一个字符,以便不会遗漏"自行车".

是否有一种通用方法可以根据字段的排序规则查找给定字符后的下一个字符,还是更安全地创建第二个条件?

select * from widget
where name >= 'ba'
and (name < 'bi' or name like 'bi%')
Run Code Online (Sandbox Code Playgroud)

我的应用程序需要支持本地化.这种查询对不同字符集的敏感程度如何?

我还需要支持MSSQL和Oracle.无论数据中出现何种语言,我有哪些选项可以确保忽略字符大小写?

MSa*_*ers 3

让我们直接跳到本地化。你会说“aa”>=“ba”吗?也许不是,但这就是瑞典的情况。另外,您根本不能假设您可以忽略任何语言的大小写。大小写明显依赖于语言,最常见的例子是土耳其语:大写的 i 是 \xc4\xb0。小写的 I 是 \xc4\xb1。

\n\n

现在,您的 SQL DB 通过“排序规则”定义 <、== 等的结果。这绝对是特定于语言的。因此,您应该为每个查询显式控制这一点。土耳其语整理顺序会将这些 i 放在它们所属的位置(土耳其语)。您不能依赖默认排序规则。

\n\n

至于“增量部分”,不用费心了。坚持 >= 和 <=。

\n