我有一个包含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