如何避免SQL查询中字符串匹配的常见错误和陷阱?

2026-04-02 12:151阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计802个文字,预计阅读时间需要4分钟。

如何避免SQL查询中字符串匹配的常见错误和陷阱?

当对字符串使用大于等于或小于等于不等号时,会得到以下结果:我们使用下方的Chars表来进行确认。然而,该表中存储的均为数字,而chr是字符串类型。CHAR >=<=对字符串使用大于等于或小于等于不等号时,会得到以下结果:

对字符串使用大于等于或者小于等于不等号时会得到什么样的结果我们使用下面的Chars表来进行确认。虽然该表中存储的都是数字但chr是字符串类型CHAR

对字符串使用大于等于或者小于等于不等号时会得到什么样的结果 我们使用下面的 Chars 表来进行确认。虽然该表中存储的都是数字但 chr 是字符串类型CHAR 类型的列。

chars 表的创建

start transaction;insert into chars values(1);insert into chars values(2);insert into chars values(3);insert into chars values(10);insert into chars values(11);insert into chars values(222);commit;

那么对 Chars 表执行下列 SELECT 语句查询条件是 chr 列大于 ‘2’会得到什么样的结果呢

select chrfrom chars c where chr > 2;

大家是不是觉得应该选取出比 2 大的 3、10、11 和 222 这 4 条记录呢下面就让我们来看看该 SELECT 语句的执行结果吧。

没想到吧是不是觉得 10 和 11 比 2 大所以也应该选取出来呢

大家之所以这样想是因为混淆了数字和字符串也就是说 2 和 ‘2’ 并不一样。 现在chr 列被定为字符串类型并且在对字符串类型的数据进行大小比较时使用的是和数字比较不同的规则。典型的规则就是按照字典顺序进行比较也就是像姓名那样按照条目在字典中出现的顺序来进行排序。该规则最重要的一点就是以相同字符开头的单词比不同字符开头的单词更相近。 Chars 表 chr 列中的数据按照字典顺序进行排序的结果如下所示。

1

10

11

2

222

3

‘10’ 和 ‘11’ 同样都是以 ‘1’ 开头的字符串首先判定为比 ‘2’ 小。这就像在字典中“提问”“提议”和“问题”按照如下顺序排列一样。

提问

提议

如何避免SQL查询中字符串匹配的常见错误和陷阱?

问题

或者我们以书籍的章节为例也可以。 1-1 节包含在第 1 章当中所以肯定比第 2 章更靠前。

1

1-1

1-2

1-3

2

2-1

2-2

3

进行大小比较时得到的结果是 ‘1-3’ 比 ‘2’ 小‘1-3’ ‘2’。比较字符串类型大小的规则今后还会经常使用所以请大家牢记。

‘2’ 小‘1-3’ ‘2’。比较字符串类型大小的规则今后还会经常使用所以请大家牢记。

tips字符串类型的数据原则上按照字典顺序进行排序不能与数字的大小顺序混淆。

本文共计802个文字,预计阅读时间需要4分钟。

如何避免SQL查询中字符串匹配的常见错误和陷阱?

当对字符串使用大于等于或小于等于不等号时,会得到以下结果:我们使用下方的Chars表来进行确认。然而,该表中存储的均为数字,而chr是字符串类型。CHAR >=<=对字符串使用大于等于或小于等于不等号时,会得到以下结果:

对字符串使用大于等于或者小于等于不等号时会得到什么样的结果我们使用下面的Chars表来进行确认。虽然该表中存储的都是数字但chr是字符串类型CHAR

对字符串使用大于等于或者小于等于不等号时会得到什么样的结果 我们使用下面的 Chars 表来进行确认。虽然该表中存储的都是数字但 chr 是字符串类型CHAR 类型的列。

chars 表的创建

start transaction;insert into chars values(1);insert into chars values(2);insert into chars values(3);insert into chars values(10);insert into chars values(11);insert into chars values(222);commit;

那么对 Chars 表执行下列 SELECT 语句查询条件是 chr 列大于 ‘2’会得到什么样的结果呢

select chrfrom chars c where chr > 2;

大家是不是觉得应该选取出比 2 大的 3、10、11 和 222 这 4 条记录呢下面就让我们来看看该 SELECT 语句的执行结果吧。

没想到吧是不是觉得 10 和 11 比 2 大所以也应该选取出来呢

大家之所以这样想是因为混淆了数字和字符串也就是说 2 和 ‘2’ 并不一样。 现在chr 列被定为字符串类型并且在对字符串类型的数据进行大小比较时使用的是和数字比较不同的规则。典型的规则就是按照字典顺序进行比较也就是像姓名那样按照条目在字典中出现的顺序来进行排序。该规则最重要的一点就是以相同字符开头的单词比不同字符开头的单词更相近。 Chars 表 chr 列中的数据按照字典顺序进行排序的结果如下所示。

1

10

11

2

222

3

‘10’ 和 ‘11’ 同样都是以 ‘1’ 开头的字符串首先判定为比 ‘2’ 小。这就像在字典中“提问”“提议”和“问题”按照如下顺序排列一样。

提问

提议

如何避免SQL查询中字符串匹配的常见错误和陷阱?

问题

或者我们以书籍的章节为例也可以。 1-1 节包含在第 1 章当中所以肯定比第 2 章更靠前。

1

1-1

1-2

1-3

2

2-1

2-2

3

进行大小比较时得到的结果是 ‘1-3’ 比 ‘2’ 小‘1-3’ ‘2’。比较字符串类型大小的规则今后还会经常使用所以请大家牢记。

‘2’ 小‘1-3’ ‘2’。比较字符串类型大小的规则今后还会经常使用所以请大家牢记。

tips字符串类型的数据原则上按照字典顺序进行排序不能与数字的大小顺序混淆。