BETWEEN用于WHERE子句中以选择两个值之间的数据范围。 如果我是正确的,则是否排除了范围的端点是特定于DBMS的。 我在以下内容中无法理解的内容: 如果我有一个值表并且执行以下查询:
BETWEEN
WHERE
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。也就是说,范围的末尾被 排除在外 。 为了使查询按预期方式工作,我输入:
food_name
O
SELECT food_name FROM health_foods WHERE food_name BETWEEN 'G' AND 'P';`
我的问题是,为什么BETWEEN数字和文本数据会有这种差异?
Between和数字和字符串的操作方式完全相同。两个端点 都 包括在内。这是ANSI标准的一部分,因此它是所有SQL方言的工作方式。
表达方式:
where num between 33 and 135
当num为135时将匹配。当number为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无论数据类型如何,其工作方式都相同。
between