2010-03-11 190 views
3
@Phoneno varchar 
@Phoneno='(123)(4520)' 

如何檢查@ Phoneno是否沒有在箭頭方括號中的數字? 例如在sql server中檢查字符串是否包含特定值

@Phoneno='()()' 
+1

使用'LIKE'%()%''? – 2010-03-11 15:01:45

+0

@senthi:如果其中一個答案有幫助,您可能需要通過點擊答案旁邊的綠色勾號來將其標記爲已接受。這將幫助你在將來得到更多的答案,如果你要求進一步的問題堆棧溢出:) – 2010-03-11 19:45:45

回答

0

這是不容易的,內置到SQL Server默認的文本功能做。

如果您使用的是SQL Server 2005及更高版本,則可以使用CLR功能 - 其中一種比較受歡迎的功能是日期處理功能,regular expressions

正則表達式擴展可以做到這一點。

1

您可以用REPALCE功能去掉括號:

DECLARE @Phoneno varchar(1000) = '(123)(4520)'; 

SET @Phoneno = REPLACE(REPLACE(@Phoneno, '(', ''), ')', ''); 

IF (ISNUMERIC(@Phoneno) = 1) 
    SELECT 'Phoneno not empty'; 
ELSE 
    SELECT 'Phoneno empty or invalid'; 
+0

對於像這樣的值呢:'@Phoneno =')(1)(('' – 2010-03-11 15:29:21

+0

嘿...男人謝謝你幫助...我已經實施並獲得了我的要求的結果...再一次感謝你...偉大的工作 – senthi 2010-03-11 16:23:51

-1

店規範化形式您的數據,使應用程序解析和分裂這個,所以你可以只保存有效號碼在數據庫中!如果您必須存儲「(」和「)」字符供以後顯示,請這樣做,但如果沒有值,請不要將()()存儲爲null

+0

通常我會同意,但是這對於地址和電話號碼等數據來說可能相當棘手,特別是如果您必須支持i18n。有很多不同的表示,試圖解析它們都會讓你的頭部爆炸。 – Aaronaught 2010-03-11 15:20:46

+0

仍然是最好在應用程序前端解析,如果沒有值,那麼該列應該爲NULL而不是'()()' – 2010-03-11 15:23:52

1

如果你想檢查電話號碼是否是格式爲(nnn)(nnnn),那麼第一部分必須是3個數字,第二部分必須是4個數字,你可以這樣做:

if @Phoneno like '([0-9][0-9][0-9])([0-9][0-9][0-9][0-9])' 
    print 'ok' 
else 
    print 'not ok' 

用ISNUMERIC方法的次要事情是它會允許小數和減號。這可以通過將這些字符替換爲空白來解決(但仍然不能驗證正確的長度)。

+0

+ 1,在這種情況下驗證的最好方法就ISNUMERIC()而言,如果你不想包含負數或小數點的數字,我會用「a」(不是空格)替換「。」和「 - 」檢查失敗。 – 2010-03-11 16:05:21

相關問題