如何在SQL中匹配'0','00','000','0000'...模式?

问题描述 投票:1回答:3

我可以使用什么语句而不是以下查询?

Select  *
        From   Customer.dbo.Human
        Where  LTrim(RTrim(Mobile)) In ('0', '00', '000', '0000', ....)
sql-server tsql sql-like
3个回答
1
投票

假设您要匹配完全由零和空格组成且包含至少一个零的移动数字。

然后以下将是一种方式..

WHERE Mobile LIKE '%0%' AND Mobile NOT LIKE '%[^ 0]%'

1
投票
Where Len(Mobile) - Len(Replace(Mobile, '0', '')) = Len(Mobile)

-1
投票
select *
from Customer.dbo.Human
where CHARINDEX(Mobile, '0') > 0

这里有一些技巧。单个'0'碰巧包含在所有其他情况中,因此它起作用,因为'0'包含在'000'中

EMPHASIS - 这是一种糟糕的模式。它会错误地识别任何一个零的字符串。搜索值实际上不是主键或类型属性标识符的任何CharIndex搜索都是危险模式。即如果你不能使用IN('SpecificValue1','SpecificValue2'),那么退一步重新评估。

我更喜欢的解决方案是不插入未通过验证的值,在清理例程期间,所有零视图字符串将在插入或更新时转换为null或空字符串。

© www.soinside.com 2019 - 2024. All rights reserved.