Sal*_*n A 9 sql t-sql sql-server string
我无法理解以下行为:
WITH tests(min, val, max) AS (
SELECT 'a', 'x', 'z' UNION ALL
SELECT '', 'x', 'z' UNION ALL
SELECT 'a', 'x', '~'
)
SELECT min, val, max, CASE WHEN val BETWEEN min AND max THEN 'PASS' ELSE 'FAIL' END AS result
FROM tests
Run Code Online (Sandbox Code Playgroud)
结果:
| min | val | max | result |
|-----|-----|-----|--------|
| a | x | z | PASS |
| | x | z | PASS |
| a | x | ~ | FAIL |
Run Code Online (Sandbox Code Playgroud)
为字符码x和~分别是120和126.在我所知道的每种编程语言中'x' < '~' is true.那么SQL是什么?
我在不同的RDBMS上得到相同的结果.在SQL Server上,使用以下排序规则:
Latin1-General,不区分大小写,区分重音,不区分kanatype,宽度不敏感
在您的问题下面的评论中,我问您使用的是什么排序规则。你说“假设默认”,但没有“默认”。“默认”取决于您的数据库和服务器的设置方式。我在我的 SQL Server 上运行了你的实验,碰巧得到了与你相同的结果,但这只是巧合。
我运行实验的 SQL Server 和数据库正在使用SQL_Latin1_General_CP1_CI_AS排序规则。基于这一事实,以下是字符的顺序:
http://collation-charts.org/mssql/mssql.0409.1252.Latin1_General_CI_AS.html
请注意,波形符~出现在字母字符之前x,其中显然包括。
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |