2010-06-22 241 views
1

我想使用SQL模式匹配來檢查字符串值是否在正確的格式。如何使用SQL模式匹配檢查特定字符串的結尾?

串代碼應該有正確的格式:

alphanumericvalue.alphanumericvalue

因此,以下是有效的代碼:

D0030.2190 
C0052.1925 
A0025.2013 

而下面是無效代碼:

D0030 
.2190 
C0052. 
A0025.2013. 
A0025.2013.2013 

到目前爲止,我有以下SQL IF c lause檢查字符串是否正確:

IF @vchAccountNumber LIKE '_%._%[^.]' 

我相信「_%」部分檢查一個或多個字符。因此,這個語句檢查一個或多個字符,然後是「。」字符,接着是一個或多個字符,並檢查最終字符不是「。」。

看來,這會爲除下列格式的IF子句允許爲有效代碼的所有組合的工作:

A0025.2013.2013 

我無法糾正這個IF子句允許它來治療此格式不正確。任何人都可以幫我糾正這個問題嗎?

謝謝。

+1

需要知道SQL供應商,以瞭解模式匹配功能。例如,SQL Server 2005+使用PATINDEX限制了模式匹配,但正則表達式支持需要使用CLR函數... – 2010-06-22 15:57:04

+0

此腳本將部署到SQL Server 2005和SQL Server 2008數據庫。 – Dangerous 2010-06-23 10:27:48

回答

1

這個stackoverflow question提到使用字邊界:[[:<:]][[:>:]]爲整個單詞匹配。您可能可以使用它,因爲您的代碼中沒有空格。

1

這是ANSI SQL的解決方案

這個喜歡錶達會發現任何模式alphanumeric.alphanumeric。所以不喜歡只找到爲你想要的那場比賽:

IF @vchAccountNumber NOT LIKE '%[^A-Z0-9].[^A-Z0-9]%' 

然而,根據你的例子,你可以使用這個...

LIKE '[A-Z][0-9][0-9][0-9][0-9].[0-9][0-9][0-9][0-9]' 

...或者一個像這樣的,如果你5 alphas, dot, 4 alphas

LIKE '[A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9].[A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9]' 

第二個對於固定長度值稍微更明顯。第一個稍微不太直觀,但可以在點的任意一側使用可變長度代碼。

其他SO問題Creating a Function in SQL Server with a Phone Number as a parameter and returns a Random NumberBest equivalent for IsInteger in SQL Server

相關問題