gpt4 book ai didi

mysql BETWEEN 对字符的权利是独占的吗?

转载 作者:太空宇宙 更新时间:2023-11-03 10:59:54 26 4
gpt4 key购买 nike

考虑这个名为 easy_drinks 的表,

+------------------+
| drink_name |
+------------------+
| Kiss on the Lips |
| Hot Gold |
| Lone Tree |
| Greyhound |
| Indian Summer |
| Bull Frog |
| Soda and It |
| Blackthorn |
| Blue Moon |
| Oh My Gosh |
| Lime Fizz |
+------------------+

这样的查询,

 select drink_name from easy_drinks where drink_name BETWEEN 'G' and 'O';

结果

+------------------+
| drink_name |
+------------------+
| Kiss on the Lips |
| Hot Gold |
| Lone Tree |
| Greyhound |
| Indian Summer |
| Lime Fizz |
+------------------+

O 开头的饮料名称不包含在结果中。但根据手册 page

expr BETWEEN min AND max

If expr is greater than or equal to min and expr is less than or equal to max, BETWEEN returns 1, otherwise it returns 0. If expr is greater than or equal to min and expr is less than or equal to max, BETWEEN >returns 1, otherwise it returns 0.

为什么查询会给出这样的结果?

我已经通过了questions解释时间戳和日期的行为。这种情况的原因是什么?

最佳答案

tl;dr

不要对字符串使用 BETWEEN

其中 drink_name >= 'G' 和 drink_name < 'P';

为什么?

O 用尾随空格有效地扩展以匹配列。所以

'O                  '

之前

'Oh My Gosh'

所以你需要

where drink_name BETWEEN 'G' and 'OZ';

如果您有一种名为Ozymandias 的饮料,那么这将不起作用。所以:

where drink_name BETWEEN 'G' and 'OZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ';

但是,我们能否安全地假设没有名为 P 的饮料和许多空格?
这是无法理解的。

select drink_name from easy_drinks
where drink_name BETWEEN 'G' and 'P';

显而易见的选择可能是使用 LEFT 只比较首字母

select drink_name from easy_drinks
where LEFT(drink_name, 1) BETWEEN 'G' and 'O';

但这会阻止使用 drink_name 上的任何索引。

关于mysql BETWEEN 对字符的权利是独占的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16709862/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com