为什么字母的 BETWEEN 命令与 SQL 中的数字不同
Why does the BETWEEN command for letters differ for numbers in SQL
我的问题是为什么当我输入查询时
SELECT * FROM movies WHERE year BETWEEN 1990 AND 2000;
包括 2000 年但是当我输入查询时:
SELECT * FROM movies WHERE name BETWEEN 'A' and 'J'
不包括以 J 开头的电影。我不明白在查看字母与数字时 between 函数的工作方式的不一致。我知道您可以使用 % 来包含它,但我想知道为什么它会这样工作。
简而言之,因为J
不等于Jumanji
。 BETWEEN A AND B
关键字等同于 >= A AND <= B
与SQL无关。
以 J
开头的所有内容(例如 JAVA
)按字母顺序大于 J
本身。
正如 Stavr 所提到的,SQL 不会推断出您使用的文字以外的其他字符。
SELECT * FROM
(
SELECT 'A Few Good Men' As Movie
UNION ALL
SELECT 'Back to the Future' As Movie
UNION ALL
SELECT 'Call of the Wild' As Movie
UNION ALL
SELECT 'Captain America' As Movie
UNION ALL
SELECT 'D Movie' As Movie
UNION ALL
SELECT 'E Movie' As Movie
UNION ALL
SELECT 'F Movie' As Movie
UNION ALL
SELECT 'G Movie' As Movie
UNION ALL
SELECT 'H Movie' As Movie
UNION ALL
SELECT 'I Movie' As Movie
UNION ALL
SELECT 'J Movie' As Movie
UNION ALL
SELECT 'J Movie 2' As Movie
) it
WHERE Movie BETWEEN 'A' AND 'J%'
我的问题是为什么当我输入查询时
SELECT * FROM movies WHERE year BETWEEN 1990 AND 2000;
包括 2000 年但是当我输入查询时:
SELECT * FROM movies WHERE name BETWEEN 'A' and 'J'
不包括以 J 开头的电影。我不明白在查看字母与数字时 between 函数的工作方式的不一致。我知道您可以使用 % 来包含它,但我想知道为什么它会这样工作。
简而言之,因为J
不等于Jumanji
。 BETWEEN A AND B
关键字等同于 >= A AND <= B
与SQL无关。
以 J
开头的所有内容(例如 JAVA
)按字母顺序大于 J
本身。
正如 Stavr 所提到的,SQL 不会推断出您使用的文字以外的其他字符。
SELECT * FROM
(
SELECT 'A Few Good Men' As Movie
UNION ALL
SELECT 'Back to the Future' As Movie
UNION ALL
SELECT 'Call of the Wild' As Movie
UNION ALL
SELECT 'Captain America' As Movie
UNION ALL
SELECT 'D Movie' As Movie
UNION ALL
SELECT 'E Movie' As Movie
UNION ALL
SELECT 'F Movie' As Movie
UNION ALL
SELECT 'G Movie' As Movie
UNION ALL
SELECT 'H Movie' As Movie
UNION ALL
SELECT 'I Movie' As Movie
UNION ALL
SELECT 'J Movie' As Movie
UNION ALL
SELECT 'J Movie 2' As Movie
) it
WHERE Movie BETWEEN 'A' AND 'J%'