我可以使用什么声明来代替下面的查询?如何匹配TSQL中的'0','00','000','0000'...模式?
Select *
From Customer.dbo.Human
Where LTrim(RTrim(Mobile)) In ('0', '00', '000', '0000', ....)
我可以使用什么声明来代替下面的查询?如何匹配TSQL中的'0','00','000','0000'...模式?
Select *
From Customer.dbo.Human
Where LTrim(RTrim(Mobile)) In ('0', '00', '000', '0000', ....)
假设您希望匹配完全由零和空格组成且至少包含一个零的移动号码。
那么下面是一个办法..
WHERE Mobile LIKE '%0%' AND Mobile NOT LIKE '%[^ 0]%'
select *
from Customer.dbo.Human
where CHARINDEX(Mobile, '0') > 0
有一些技巧怎么回事。单个'0'碰巧包含在所有其他案例中,因此它的工作原理是'0'包含在'000'内
重点 - 这是一种糟糕的模式。它会错误地识别任何带零的字符串。任何CharIndex搜索搜索值无效的主键或类型属性标识符是一种危险模式。即如果你不能使用IN('SpecificValue1','SpecificValue2'),那么退一步重新评估。
我更喜欢的解决方案是不插入未通过验证的值,在清理例程期间,所有零寻找的字符串将在插入或更新时转换为null或空字符串。
即使OP接受这一点,我怀疑它会变成是需要什么。模式似乎是“完全由零组成”,而不仅仅是“包含零” – 2014-10-30 08:33:07
Where Len(Mobile) - Len(Replace(Mobile, '0', '')) = Len(Mobile)
为什么不能Len哪里(Replace(Mobile,'0',''))= 0'? – thepirat000 2014-12-07 03:07:50
这些也会匹配空字符串,对吗? – Twinkles 2014-10-30 08:46:09
@Twinkles - 是的。在这一刻。我怀疑这是所需的功能。将编辑。 – 2014-10-30 08:48:28