2012-05-13 3 views
7

との間のすべての数値に一致するSQLパターン式が必要です。[1-999]の間のすべての数字に一致するMSSQLパターン

EDIT:MSSQLで

+0

パターンやワイルドカード検索に関して、すべてのDBMが同じ標準に準拠するわけではありません。あなたは具体的にする必要があります。当初あなたの質問には正しいタグがなかった。 – Hameed

答えて

10

文字クラスにSQLでパターンマッチングするLIKE演算子を使用すると、regexにあるような文字クラスのワイルドカードリピートはありません。つまり、[0-9]+または[0-9]{1,3}のようなことはできません(これらの両方とも、0をキャプチャします)。

したがって、数値を比較する前にゼロパッドする必要があります。

それは直接パターンではないのですが、この表現は、LIKE演算子に部分的に依存しており、1〜999の正の整数のために動作します:

RIGHT('00' + myfield, 3) LIKE '[0-9][0-9][0-9]' 
AND RIGHT('00' + myfield, 3) <> '000' 
AND LEN(myfield) <= 3 

編集:仮定は、あなたがしていると判断あなたが指定しなかったので、Microsoft SQL Serverについて話しています。

+0

どのDBMSで[0-9] [0-9] [0-9] 'が好きですか?それは確かに標準SQL 'LIKE'ワイルドカード(標準SQLのみ'% 'と' _'ワイルドカード、いいえ「の範囲を」理解) –

+0

すべてではないが、いくつかは、大幅に正規表現をサポートしていないが、ではありません。 MySQLでは、 'WHERE num REGEXP '^ [1-9] [0-9] {1,2} $' – Hameed

+0

@Hameedと書くことができます:私はそれを理解していますが、あなたの例は' LIKE'演算子を使用していません。 –

5
SELECT * FROM table WHERE field BETWEEN 1 AND 999; 

EDIT:これが唯一のPostgreSQLで動作します。あなたは、文字列にマッチする正規表現パターンを探しているなら

、このような何か:

SELECT * FROM table WHERE field ~ '[1-9][0-9]{1,2}'; 

regexp patterns上のドキュメントを参照してください。

SQL Serverは正規表現をそのまま使用しません。です。
次のworkaroundまたはこの質問を使用することができます:Regular Expressions in SQL Server servers?

+0

Sqlパターンが欲しいです! – ARZ

+1

@ARZ、それはSQLですから、あなたは* far *より具体的でなければなりません。 – huon

関連する問題