我可以使用什麼聲明來代替下面的查詢?如何匹配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