回答

收藏

NOT LIKE和LIKE不返回相反的结果

技术问答 技术问答 250 人阅读 | 0 人回复 | 2023-09-14

我有一个包含200条记录的表,其中10条记录的文本包含单词“ TAX”。
6 ?# ]% H1 P8 u1 }) ]7 s当我执行
# G( U0 \- Q/ U: @" ?Select * from tbl1 WHERE [TextCol] LIKE '%TAX%'; p& f6 g1 q3 L+ J
然后我正确地得到了那10条记录的结果集。- o3 B- c3 I4 a4 |9 v
但是当我试图排除那些记录时+ F6 w% l' g. x  L4 [
Select * from tbl1 WHERE [TextCol] NOT LIKE '%TAX%'
+ \# }) E) j) l$ T! p它仅返回100条记录,而不是190条。
# }' m; u. T4 `# }8 r' x                + Y5 M7 v/ l$ Z
解决方案:
( T) }8 V$ p, M$ i# x2 n" r* {                ; U* m/ d' t( v) `* R% Z. \

( n5 Q, w6 ?/ y0 K  D# q% N' u- g* `' p. E$ m5 w
                这会返回正确的结果吗?
) P" V( z+ }! U5 _. K/ `6 f' \Select * from tbl1 WHERE COALESCE([TextCol],'-1') NOT LIKE '%TAX%'" x0 \! U5 L& N0 J2 H# \  o
我认为NULL这里是值的问题,如果列中包含它们,NULL NOT LIKE '%TAX%'则将返回UNKNOWN/NULL,因此将不会被选择。
- U& E, o  ]$ v2 x0 u/ e: K我建议您阅读有关使用NULL值进行处理的信息,或在这里。
& h1 r* s, @+ l2 U. X3 y正如@ughai所建议的,如果性能是一个问题,您还可以使用:7 S$ ^, d- T8 ]" Y/ t: Y
  Select * from tbl1
- C- ~. ?* |7 Y9 A) ]  WHERE [TextCol] NOT LIKE '%TAX%'3 _( y$ t7 C9 @' _5 Z8 |" }
     OR [TextCol] IS NULL
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则