Cra*_*lus 13 mysql sql varchar numbers between
BETWEEN在WHERE子句中用于选择两个值之间的数据范围.
如果我是正确的,是否排除范围的端点是DBMS特定的.
我无法理解的内容如下:
如果我有一个值表,我会执行以下查询:
SELECT food_name
FROM health_foods
WHERE calories BETWEEN 33 AND 135;`
Run Code Online (Sandbox Code Playgroud)
查询返回结果行,包括卡路里= 33和卡路里= 135(即包括范围端点).
但如果我这样做:
SELECT food_name
FROM health_foods
WHERE food_name BETWEEN 'G' AND 'O';
Run Code Online (Sandbox Code Playgroud)
我没有food_name开头的行O.即排除范围的结束.
为了使查询按预期工作,我键入:
SELECT food_name
FROM health_foods
WHERE food_name BETWEEN 'G' AND 'P';`
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么BETWEEN数字和文本数据会有这样的差异?
Gor*_*off 20
Between对数字和字符串的操作方式完全相同.两个端点都包括在内.这是ANSI标准的一部分,因此它是所有SQL方言的工作方式.
表达方式:
where num between 33 and 135
Run Code Online (Sandbox Code Playgroud)
当num为135时匹配.当数字为135.00001时,它将不匹配.
同样,表达式:
where food_name BETWEEN 'G' AND 'O'
Run Code Online (Sandbox Code Playgroud)
将匹配'O',但不匹配以'O'开头的任何其他字符串.
一旦简单的kludge使用"〜".它具有最大的7位ASCII值,因此对于英语应用程序,它通常运行良好:
where food_name between 'G' and 'O~'
Run Code Online (Sandbox Code Playgroud)
你也可以做其他各种事情.这有两个想法:
where left(food_name, 1) between 'G' and 'O'
where food_name >= 'G' and food_name < 'P'
Run Code Online (Sandbox Code Playgroud)
但重要的是,between无论数据类型如何,都以相同的方式工作.
以"橙色"与"O"为例.字符串'Orange'显然不等于字符串'O',并且因为它更长,它必须更大,不能小于.
你可以做'Orange'<'OZZZZZZZZZZZZZZ'.
| 归档时间: |
|
| 查看次数: |
20605 次 |
| 最近记录: |