【发布时间】:2014-10-30 05:55:07
【问题描述】:
我可以用什么语句代替下面的查询?
Select *
From Customer.dbo.Human
Where LTrim(RTrim(Mobile)) In ('0', '00', '000', '0000', ....)
【问题讨论】:
标签: sql-server tsql sql-like
我可以用什么语句代替下面的查询?
Select *
From Customer.dbo.Human
Where LTrim(RTrim(Mobile)) In ('0', '00', '000', '0000', ....)
【问题讨论】:
标签: sql-server tsql sql-like
假设您要匹配完全由零和空格组成且至少包含一个零的手机号码。
那么以下将是一种方式..
WHERE Mobile LIKE '%0%' AND Mobile NOT LIKE '%[^ 0]%'
【讨论】:
Where Len(Mobile) - Len(Replace(Mobile, '0', '')) = Len(Mobile)
【讨论】:
Where Len(Replace(Mobile, '0', '')) = 0?
select *
from Customer.dbo.Human
where CHARINDEX(Mobile, '0') > 0
这里有一些技巧。单个“0”恰好包含在您的所有其他案例中,因此它可以工作,因为“0”包含在“000”中
强调 - 这是一个糟糕的模式。它会错误地识别任何带有零的字符串。搜索值不是有效的主键或类型化属性标识符的任何 CharIndex 搜索都是危险的模式。即如果您不能使用 IN('SpecificValue1','SpecificValue2') 则退后一步重新评估。
我希望的解决方案是不插入未通过验证的值,在清理例程期间插入或更新时,所有看起来为零的字符串都将转换为 null 或空字符串。
【讨论】: