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/

10-11 01:54