在BETWEEN
子句中使用WHERE
来选择两个值之间的数据范围。
如果我是正确的,那么范围的端点是否被排除在外是特定于DBMS的。
我无法理解的是:
如果我有一个值表,并执行以下查询:
SELECT food_name
FROM health_foods
WHERE calories BETWEEN 33 AND 135;`
查询返回结果行,包括卡路里=33和卡路里=135(即包括范围终结点)。
但如果我这样做:
SELECT food_name
FROM health_foods
WHERE food_name BETWEEN 'G' AND 'O';
我不从
food_name
开始获取带有O
的行。也就是说,不包括范围的结尾。要使查询按预期工作,请键入:
SELECT food_name
FROM health_foods
WHERE food_name BETWEEN 'G' AND 'P';`
我的问题是为什么数字和文本数据的
BETWEEN
有如此大的差异? 最佳答案
对数字和字符串的操作方式完全相同。包括两个端点。这是ANSI标准的一部分,所以所有SQL方言都是这样工作的。
表达式:
where num between 33 and 135
当num为135时匹配。当数字为135.00001时,它将不匹配。
同样,表达式:
where food_name BETWEEN 'G' AND 'O'
将匹配“o”,但不匹配以“o”开头的任何其他字符串。
曾经简单的拼字法就是用“~”。这是最大的7位ASCII值,因此对于英语语言应用程序,它通常工作得很好:
where food_name between 'G' and 'O~'
你也可以做其他的事情。以下是两个想法:
where left(food_name, 1) between 'G' and 'O'
where food_name >= 'G' and food_name < 'P'
不过,重要的一点是,不管数据类型如何,
between
都以相同的方式工作。关于mysql - SQL BETWEEN用于文本与数值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15720950/