Sql server 如何匹配';0'';00'';000'';0000'。。。TSQL中的模式?
我可以用什么语句代替下面的查询Sql server 如何匹配';0'';00'';000'';0000'。。。TSQL中的模式?,sql-server,tsql,sql-like,Sql Server,Tsql,Sql Like,我可以用什么语句代替下面的查询 Select * From Customer.dbo.Human Where LTrim(RTrim(Mobile)) In ('0', '00', '000', '0000', ....) 这里有一些技巧。单个“0”恰好包含在所有其他案例中,因此它可以工作,因为“0”包含在“000”中 强调-这是一个糟糕的模式。它将错误地识别任何包含零的字符串。如果搜索值不是有效的主键或类型化属性标识符,则任何CharIndex搜索都是
Select *
From Customer.dbo.Human
Where LTrim(RTrim(Mobile)) In ('0', '00', '000', '0000', ....)
这里有一些技巧。单个“0”恰好包含在所有其他案例中,因此它可以工作,因为“0”包含在“000”中
强调-这是一个糟糕的模式。它将错误地识别任何包含零的字符串。如果搜索值不是有效的主键或类型化属性标识符,则任何CharIndex搜索都是危险的模式。i、 e如果您不能在('SpecificValue1'、'SpecificValue2')中使用,请退回重新评估
我更喜欢的解决方案是不要插入未通过验证的值,在清理例程中插入或更新时,所有看起来像零的字符串都将转换为null或空字符串。假设您希望匹配完全由零和空格组成且至少包含一个零的手机号码 那么下面就是一种方法
WHERE Mobile LIKE '%0%' AND Mobile NOT LIKE '%[^ 0]%'
尽管OP接受了这一点,但我怀疑它是否会成为我们所需要的。该模式似乎是“完全由零组成”,而不仅仅是“包含一个零”,这些也将匹配空字符串,不是吗?@Twinkles-是的。现在。我怀疑这是我们想要的功能。将进行编辑。为什么不
其中Len(替换(移动,'0','')=0
?
WHERE Mobile LIKE '%0%' AND Mobile NOT LIKE '%[^ 0]%'
Where Len(Mobile) - Len(Replace(Mobile, '0', '')) = Len(Mobile)