SQL:使用 <= 和 >= 将字符串与通配符进行比较

use*_*598 3 sql sql-server wildcard string-comparison

假设我有一个看起来像这样的表:

Id  |  Name  |  Age
=====================
1   |  Jose  | 19

2   |  Yolly | 26

20  |  Abby  | 3

29  |  Tara  | 4
Run Code Online (Sandbox Code Playgroud)

我的查询语句是:

1)Select * from thisTable where Name <= '*Abby'; 它返回0行

2)Select * from thisTable where Name <= 'Abby'; 返回包含 Abby 的行

3)Select * from thisTable where Name >= 'Abby'; 返回所有行 // 第 1-4 行

4)Select * from thisTable where Name >= '*Abby'; 返回所有行;// 第 1-4 行

5)Select * from thisTable where Name >= '*Abby' and Name <= "*Abby"; 返回 0 行。

6)Select * from thisTable where Name >= 'Abby' and Name <= 'Abby'; 返回与 Abby 的行;

我的问题:为什么我得到这些结果?通配符对查询结果有何影响?如果条件是这样,为什么我得不到任何结果Name <= '*Abby'

Mic*_*zyn 5

仅当您使用运算符时才解释通配符LIKE

因此,当您尝试与字符串进行比较时,它将按字面意思处理。因此,在比较中使用字典顺序。

1) 之前没有字母*,因此没有返回任何行。

2)A是字母表中的第一个字母,所以其余的名字都比Abby,只有Abby等于它自己。

3) 与 2) 相反

4) 参见1)

5) 参见 1)

6) 该条件等价于Name = 'Abby'