SQL:与通配符运算符混淆
SQL : Confused with WildCard operators
这两个 sql 语句有什么区别
1- select * from tblperson where name not like '[^AKG]%';
2- select * from tblperson where name like '[AKG]%';
显示相同的结果:以 a,k,g 开头的字母
like '[^AKG]%
-- 这会获取名称的第一个字符不是 A、K 或 G 的行。^
匹配不在指定集合或指定字符范围内的任何单个字符.还有一个否定not
。因此,当您说 name not like '[^AKG]%'
时,您会得到名称的第一个字符为 A、K 或 G 的行。
name like '[AKG]%
-- 您会得到名称的第一个字符是 A、K 或 G 的行。
通配符[]
匹配指定范围内的任意字符或一组字符。在您的情况下,它是一组字符。
所以这两个条件是等价的
您正在使用双'NOT'。你的第一个字符匹配中的胡萝卜 '^' 是 shorthand for 'not',所以你正在评估 'not like [not' AKG]% IE 而不是 '[^AKG]%'.
1) 在您使用的第一个查询中 'Not' 和 '^' 基本上它不是两次所以它取消了
因此您的查询是 'Not Like [^AKG]' ==> 'Like [AKG]'
^ a.k.a 插入符号或向上箭头。
此符号的目的是为方括号 [] 中未列出的任何字符提供匹配,这意味着通常它不会为以 AKG 开头的任何内容提供结果,但由于您添加了单词 NOT对于查询,你基本上是在取消运算符,就像你在做数学一样:
(- 1) * (- 1)
这两个 sql 语句有什么区别
1- select * from tblperson where name not like '[^AKG]%';
2- select * from tblperson where name like '[AKG]%';
显示相同的结果:以 a,k,g 开头的字母
like '[^AKG]%
-- 这会获取名称的第一个字符不是 A、K 或 G 的行。^
匹配不在指定集合或指定字符范围内的任何单个字符.还有一个否定not
。因此,当您说 name not like '[^AKG]%'
时,您会得到名称的第一个字符为 A、K 或 G 的行。
name like '[AKG]%
-- 您会得到名称的第一个字符是 A、K 或 G 的行。
通配符[]
匹配指定范围内的任意字符或一组字符。在您的情况下,它是一组字符。
所以这两个条件是等价的
您正在使用双'NOT'。你的第一个字符匹配中的胡萝卜 '^' 是 shorthand for 'not',所以你正在评估 'not like [not' AKG]% IE 而不是 '[^AKG]%'.
1) 在您使用的第一个查询中 'Not' 和 '^' 基本上它不是两次所以它取消了 因此您的查询是 'Not Like [^AKG]' ==> 'Like [AKG]'
^ a.k.a 插入符号或向上箭头。
此符号的目的是为方括号 [] 中未列出的任何字符提供匹配,这意味着通常它不会为以 AKG 开头的任何内容提供结果,但由于您添加了单词 NOT对于查询,你基本上是在取消运算符,就像你在做数学一样:
(- 1) * (- 1)