問題:変数 (または列)
の値を数字と 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'
誰でもこれを行う方法を知っていますか?
問題:変数 (または列)
の値を数字と 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'
誰でもこれを行う方法を知っていますか?
これは、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'
これは役に立ちますか
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
T-SQL は RegEx をサポートしていません。
ただし、 SQL CLRを使用してそのような式を実行できます。
LEN関数も試してください。
if (LEN(@var) <= 150)
print 'OK'
else
print 'Not OK'