You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:MariaDB中BETWEEN操作符处理字符串列的异常问题

问题描述

我有一张名为Fahrer的表,测试数据如下:

+------------+----------+------------+
| PersonalNr | Vorname  | Nachname   |
+------------+----------+------------+
|          1 | Thorsten | Anker      |
|          2 | Michelle | Craft      |
|          3 | Sandra   | Bäcker     |
|          4 | Heinz    | Tölpel     |
|          5 | Horst    | Brot       |
|          6 | Merle    | Breitbarth |
|          7 | Boris    | Baum       |
|          8 | Emerich  | Adenauer   |
|          9 | Wilhelm  | Hase       |
|         10 | Nora     | Holzmann   |
|         11 | Winfried | Hildebrand |
|         12 | Jupp     | Garb       |
|         13 | Helene   | Braun      |
|         14 | Herwig   | Jaeger     |
|         15 | Jonathan | Berger     |
|         16 | Jimmy    | Gehrig     |
|         17 | Odelia   | Fischer    |
+------------+----------+------------+

当对PersonalNr列执行如下查询时:

SELECT * FROM Fahrer WHERE PersonalNr BETWEEN 9 AND 12;

得到了预期的结果:

+------------+----------+------------+
| PersonalNr | Vorname  | Nachname   |
+------------+----------+------------+
|          9 | Wilhelm  | Hase       |
|         10 | Nora     | Holzmann   |
|         11 | Winfried | Hildebrand |
|         12 | Jupp     | Garb       |
+------------+----------+------------+

但执行如下查询时:

SELECT * FROM Fahrer WHERE Nachname BETWEEN "C" and "H";

所有包含以H开头的Nachname值的行都被排除在结果之外。请问我的推理存在哪些错误?

问题分析

你混淆了数值类型和字符串类型使用BETWEEN的逻辑:

  • 对于数值类型,BETWEEN a AND b等价于>=a AND <=b,边界值会被包含在内。
  • 对于字符串类型,BETWEEN "C" AND "H"的逻辑是匹配所有字典序大于等于"C"且小于等于"H"的字符串。这里的字符串比较是逐字符进行的:
    • 单字符的"H"和以"H"开头的多字符姓氏(比如"Hase"、"Holzmann")比较时,第一个字符相同,但"H"没有后续字符,因此字典序上*"H" < "Hase"*,所以这些多字符姓氏不满足<= "H"的条件,自然不会被包含在结果里。
正确的查询写法

如果要获取所有以C到H开头的Nachname记录,可以采用以下两种方式:

  • 方式一:提取姓氏的首字符进行范围比较
SELECT * FROM Fahrer WHERE LEFT(Nachname, 1) BETWEEN "C" AND "H";
  • 方式二:使用LIKE匹配(适合不支持LEFT函数的数据库)
SELECT * FROM Fahrer 
WHERE Nachname LIKE "C%" 
   OR Nachname LIKE "D%" 
   OR Nachname LIKE "E%" 
   OR Nachname LIKE "F%" 
   OR Nachname LIKE "G%" 
   OR Nachname LIKE "H%";

内容的提问来源于stack exchange,提问作者SPOOCQ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 12:48:07