3

問題:変数 (または列)
の値を数字と ASCI 文字に制限しますが、VARCHAR可変長は許可します。
このスクリプトでは、必要な結果が得られません:

declare @var as VARCHAR (150)
select @var = '123ABC'

if (@var LIKE '[a-zA-Z0-9]{0,150}')
    print 'OK'
else
    print 'Not OK'  

誰でもこれを行う方法を知っていますか?

4

4 に答える 4

4

これは、not carat ^ と NOT LIKE 式で行うことができます。

つまり、英数字以外は好きではありません;)これは、標準の数字と文字で機能します。

declare @var as VARCHAR (150)
select @var = '123ABC'

if (@var NOT LIKE '%[^a-zA-Z0-9]%')
    print 'OK'
else
    print 'Not OK'

編集: 照合のヒントについて Martin に感謝します。ý のような文字を非英数字として扱いたい場合は、以下のように COLLATE に追加します。

declare @var as VARCHAR (150)
select @var = '123ABCý'

if (@var NOT LIKE '%[^a-zA-Z0-9]%' COLLATE Latin1_General_BIN ) 
    print 'OK'
else
    print 'Not OK'  
于 2012-09-03T10:46:04.377 に答える
1

これは役に立ちますか

Declare @t table (Alphanumeric VARCHAR(100))
Insert Into @t 
Select '123ABCD' Union All Select 'ABC' Union All 
Select '123'  Union All  Select  '123ABCý' Union All
Select 'a-z123' Union All  Select 'abc123' Union All
Select 'a1b2c3d4'


SELECT Alphanumeric
FROM @t 
WHERE Alphanumeric LIKE '%[a-zA-Z0-9]%' 
AND ( Alphanumeric NOT LIKE  '%[^0-9a-zA-Z]%' COLLATE Latin1_General_BIN) 
AND LEN(Alphanumeric)> 6 -- display records having more than a length of 6

//結果

英数字

123ABCD
a1b2c3d4

NB~ Martin の照合ヒントを使用しました..Thanks

于 2012-09-03T11:21:14.600 に答える
0

T-SQL は正規表現をサポートしていません。取得できる最も近いのは、PATINDEX特定の文字を照合するために使用できる関数ですが、カウントを指定することはできません。LEN長さをチェックする機能と組み合わせてみてください。

のいくつかの例については、このページを参照してくださいPATINDEX

于 2012-09-03T10:45:16.797 に答える
0

T-SQL は RegEx をサポートしていません。

ただし、 SQL CLRを使用してそのような式を実行できます。


LEN関数も試してください。

if (LEN(@var) <= 150)
    print 'OK'
else
    print 'Not OK'  
于 2012-09-03T10:42:12.447 に答える