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
存在这样的差异?
答案 0 :(得分:18)
Between对数字和字符串的操作方式完全相同。包含两个端点 。这是ANSI标准的一部分,因此它是所有SQL方言的工作方式。
表达式:
where num between 33 and 135
当num为135时,将匹配。当数字为135.00001时,它将不匹配。
同样,表达式:
where food_name BETWEEN 'G' AND 'O'
将匹配'O',但不匹配以'O'开头的任何其他字符串。
一旦简单的kludge使用“〜”。它具有最大的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
的工作方式都相同。
答案 1 :(得分:5)
以'Orange'与'O'为例。字符串'Orange'显然不等于字符串'O',因为它更长,它必须更大,不能小于。
你可以做'橙色'&lt; 'OZZZZZZZZZZZZZZ'虽然。
答案 2 :(得分:2)