2011-06-24 21 views
0

可能性の重複:
Using regular expression within a stored procedure文字列の中の特殊文字と特殊記号を特定するにはどうすればよいですか?

は、私は私はこれを使用して、小文字や特殊Symbols.Iを含める含むべきではないクエリの下に使用している文字列を、検証する必要があります特別なシンボルを見つけることができ、小文字を見つけることができません。最高の方法を提案してください。

DECLARE @InvNum VARCHAR(256); 

SET @InvNum='abcACB123' 

IF (@InvNum LIKE '%[^A-Z0-9]%') 
    BEGIN 
    Print 'Enter valid Invoice #, Special characters and Lowecase Letters are not allowed' 
    END 
ELSE 
    BEGIN 
    Print 'Validation Success' 
    END 
+1

文字列の検証は、アプリケーションレイヤーで行うのが一般的です。 – JNK

+0

小文字を検出しようとする代わりに、文字列をすべて大文字に変換することができます – dave

答えて

4

HalfTrackMindManは、ほぼ右のそれを持っていた(サンプルデータの場合と)が、残念ながら、文字は常に小文字(そうbcABC123が彼の検証に合格します)を含むように出て拡張範囲:

DECLARE @InvNum VARCHAR(256); 

SET @InvNum='abcACB123' 

IF (@InvNum COLLATE Latin1_General_CS_AS LIKE '%[^ABCDEFGHIJKLMNOPQRSTUVWXYZ0-9]%') 
    BEGIN 
    Print 'Enter valid Invoice #, Special characters and Lowecase Letters are not allowed' 
    END 
ELSE 
    BEGIN 
    Print 'Validation Success' 
    END 

使用する照合

は好みの問題です([A-Z]AbBcCdDeEf...zZようにして拡大) - バイナリcollat​​ioのいずれかを(_CS)とアクセントセンシティブ(_AS)のいずれかが適しています。

+0

+1、ちょうど同じことを追加しようとしていました:) – AdaTheDev

+0

スクリプトのおかげで@ HalfTrackMindManのスクリプトは、文字列bcABC123にvalidaitonを渡します。これはクエリのパフォーマンスに影響します。 – Simhadri

2
IF (@InvNum COLLATE Latin1_General_CS_AS LIKE '%[^A-Z0-9]%') 
+0

私は個人的にはLatin1_General_Binを使用しますが、これはやり方です。 –

+0

それは私のために働く、ありがとう@HalfTrackMindMan私のクエリのパフォーマンスに影響を与えるかどうかを提案してください。 – Simhadri