2011-02-06 14 views
6

私はISBNを一致させるため、以下のSQL正規表現パターンを作成した: SQL正規表現

CREATE RULE ISBN_Rule AS @value LIKE 'ISBN\x20(?=.{13}$)\d{1,5}([-])\d{1,7}\1\d{1,6}\1(\d|X)$' 

Iは、テストデータとして以下の値を使用します。ただし、データはコミットされていません。

ISBN 0 93028 923 4 | ISBN 1-56389-668-0 | ISBN 1-56389-016-X 

どこが間違っていますか?

+0

RDBMS:

さまざまISBN 10と13の形式上の文字列の

に対処するためにいくつかの論理和が必要になるでしょうか? .... –

+0

Microsoft SQL server 2005 – Sudantha

答えて

6

あなたはLIKE使ってこれを行うことができます。

LIKE 'ISBN [0-9][ -][0-9][0-9][0-9][0-9][0-9][ -][0-9][0-9][0-9][ -][0-9X]' 
+0

ISBN形式は、あなたがここで持っているものより多用途です。 Wikipediaを参照してください。これはRegExパターンのどこにもありません。 – RichardTheKiwi

+0

ありがとうこれは私のために働いた! – Sudantha

+0

@ suudantha:私の解決策は狭いケースにしか対応していません。ありがとう、結構です。 – gbn

4

SQL Server 2005は、箱から出してREGEX式をサポートしていない、あなたはUDFによってその機能を提供するために、OLEオートメーションまたはCLRが必要になります。

ザのみサポートされているワイルドカードは%(任意)と_(1)、文字範囲(または否定)は[]必要に応じて[^]を使用して一致しています。だからあなたの表現

'ISBN\x20(?=.{13}$)\d{1,5}([- ])\d{1,7}\1\d{1,6}\1(\d|X)$' 

[ - ]と他のすべてがリテラルであることを意味します。

+0

正規表現をそのまま使用していました。-s – Sudantha

+0

@Sudantha:完全正規表現ではなく、限定的なサポートLIKEとPATINDEXをサポートしています。私はdownvoteをしなかった - それは実際に私のupvoteだった。 –

1

| (\ d | X)ここに $。また、これは問題だとは思っていませんが、[ - ]になる可能性があります[ - ]

編集:大丈夫ですが、正規表現のlib/controlを取得したときにこれを覚えておいてください。 SQL Server内の