我可以使用什么语句而不是以下查询?
Select *
From Customer.dbo.Human
Where LTrim(RTrim(Mobile)) In ('0', '00', '000', '0000', ....)
假设您要匹配完全由零和空格组成且包含至少一个零的移动数字。
然后以下将是一种方式..
WHERE Mobile LIKE '%0%' AND Mobile NOT LIKE '%[^ 0]%'
Where Len(Mobile) - Len(Replace(Mobile, '0', '')) = Len(Mobile)
select *
from Customer.dbo.Human
where CHARINDEX(Mobile, '0') > 0
这里有一些技巧。单个'0'碰巧包含在所有其他情况中,因此它起作用,因为'0'包含在'000'中
EMPHASIS - 这是一种糟糕的模式。它会错误地识别任何一个零的字符串。搜索值实际上不是主键或类型属性标识符的任何CharIndex搜索都是危险模式。即如果你不能使用IN('SpecificValue1','SpecificValue2'),那么退一步重新评估。
我更喜欢的解决方案是不插入未通过验证的值,在清理例程期间,所有零视图字符串将在插入或更新时转换为null或空字符串。