3

「03xxxxxxxx」の形式ではないすべての入力を拒否しようとしているので、次のようなテーブルを作成しました

create table records
(
....
num varchar(255) NOT NULL,
...
CONSTRAINT num_check CHECK (num like '03 [0-9]{4} [0-9]{4}')
)

たとえば、「03 12341234」を受け入れる必要があります(私は思いますか?)。しかし、SQLマネージャーを介してこれを追加しようとすると、「INSERTステートメントがCHECK制約「num_check」と競合しました」というメッセージでエラーが発生します。

最初は正規表現がオフになっていると思いましたが、他のいくつかの場所で試してみました。上記の例を受け入れます。何か案は?

4

1 に答える 1

7

like正規表現では機能しません。独自の非常に単純なワイルドカードパターンがあり、、、、、およびのみをサポートし%ます。それでおしまい。ほとんどの正規表現機能と同じように、機能しません。 次を使用できるはずです。_[a-z][^a-z]{4}

like '03 [0-9][0-9][0-9][0-9] [0-9][0-9][0-9][0-9]'

もう1つのオプション、少し繰り返しが少ない:

declare @digitChar nvarchar(12)
set @digitChar = '[0-9]' 

Where句:

like '03 ' + replicate(@digitChar,4) + ' ' + replicate(@digitChar,4)

例:http ://sqlfiddle.com/#!3 / d41d8 / 3251

于 2012-08-13T05:23:55.887 に答える