一尘不染

文字与数字值之间的SQL BETWEEN

sql

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数字和文本数据会有这种差异?


阅读 166

收藏
2021-03-10

共1个答案

一尘不染

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无论数据类型如何,其工作方式都相同。

2021-03-10