gpt4 book ai didi

sql - 字符串比较的意外结果

转载 作者:行者123 更新时间:2023-12-02 11:37:26 24 4
gpt4 key购买 nike

我无法理解以下行为:

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

结果:

| min | val | max | result |
|-----|-----|-----|--------|
| a | x | z | PASS |
| | x | z | PASS |
| a | x | ~ | FAIL |

x的字符代码和~分别是120和126。在我所知道的每种编程语言中'x' < '~' is true 。那么 SQL 是什么呢?

我在不同的 RDBMS 上得到相同的结果。在 SQL Server 上,使用以下排序规则:

Latin1-General, case-insensitive, accent-sensitive, kanatype-insensitive, width-insensitive

最佳答案

在你的问题下面的评论中,我问你什么 collation你正在使用。你说“假设默认”,但没有“默认”。 “默认”取决于您的数据库和服务器的设置方式。我在我的 SQL Server 上运行了你的实验,碰巧得到了与你相同的结果,但这只是巧合。

我运行实验的 SQL Server 和数据库使用 SQL_Latin1_General_CP1_CI_AS 排序规则。基于这一事实,以下是字符的排序:

http://collation-charts.org/mssql/mssql.0409.1252.Latin1_General_CI_AS.html

请注意,波浪号 ~ 出现在字母字符之前,其中显然包括 x

关于sql - 字符串比较的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51558368/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com