2013-07-05 73 views
3

我正在使用sql server存儲過程進行數據導入。數據格式是這樣的:如何驗證SQL服務器中的字符串格式

A7(5)B666

'5' 是一個變量,它可以是多個數字#,即,10,123,....

'666'也是一個變量。它是一個文本字符串,每個字符是'6',但可以具有任何#的'6',即666666,66,666666666666.

其他部分,A7()B是固定的。

有沒有簡單的方法來驗證這在SP?我可以使用子字符串解析字符串,但它似乎太複雜,因爲我必須驗證#。有沒有類似於sql server中的正則表達式的方法?我可以使用LIKE運算符嗎?除了WHERE條款外,我找不到如何使用它。

感謝

+0

谷歌搜索 「在SQL Server中的正則表達式」 產生了大量相關的點擊量,包括這裏的問題在StackOverflow上。 –

+0

問題是:推薦的方法是使用MDS或SQL CLR。就我而言,我無法使用它們。除了直接解析字符串還有其他方法嗎? – urlreader

回答

2

試試這個

DECLARE @t TABLE(v VARCHAR(500)) 
INSERT INTO @t 
VALUES 
    ('A7(5)B666'), 
    ('A7(555)B66666'), 
    ('A7(5ups)B666'), 
    ('A7(5)B6ups66'), 
    ('A7(5)B666 ') 

SELECT v, 
    CASE WHEN SUBSTRING(v,CHARINDEX('(',v)+1,CHARINDEX(')',v)-CHARINDEX('(',v)-1) LIKE '%[^0-9]%' 
     THEN 0 
     ELSE 1 
    END isNumberInBrackets, 
    CASE WHEN SUBSTRING(v,CHARINDEX(')B',v)+2,DATALENGTH(v)-CHARINDEX('(',v)-1) LIKE '%[^0-9]%' 
     THEN 0 
     ELSE 1 
    END isNumberAfterB 
FROM @t