4

列の 1 つが、特定の長さ (たとえば 4) の英数字の文字列とそれに続く ":" の後に整数が続く文字列を定義する文字列と一致するテーブルから行をクエリする必要があります。

  • pattern : alphanumericstring : 整数
  • 例 1: 1234:someint
  • 例 2: abcd:someotherint

私は次のことを試しました

select * from mytable where col1 like '[]{4}:%' 

select * from mytable where col1 like '.{4}:%'

そして、これらのどちらも機能しません。「:」に続く部分が整数であることを確認しようとさえしなかったことは承知しています。

4

3 に答える 3

3

SQL Server は正規表現を直接サポートしていません (検索すると、ユーザー定義関数を使用して正規表現を追加するためのチュートリアルが見つかる可能性があります)。

LIKEは量指定子をサポートしていませんが、ワイルドカードと軽量の文字クラスがあります。

アンダースコアは任意の文字に一致します:

SELECT col1
FROM data
WHERE col1 LIKE '____:%';

または、一致する文字の範囲を指定できます。

SELECT col1
FROM data
WHERE col1 LIKE '[a-z0-9][a-z0-9][a-z0-9][a-z0-9]:%';

これらのライブを SQLFiddle で参照してください。

2 番目の部分が数字のみで構成されている必要があることを指定するには、追加の条件を使用できます。

SELECT col1
FROM data
WHERE col1     LIKE '[a-z0-9][a-z0-9][a-z0-9][a-z0-9]:%'
  AND col1 NOT LIKE '[a-z0-9][a-z0-9][a-z0-9][a-z0-9]:%[^0-9]%';

最後の 1 つをライブでテストすることもできます。

于 2013-08-02T07:20:20.200 に答える
0

それは醜いですが、これは正の整数の問題を解決するはずです:

;WITH test AS (
  SELECT expr = '1234:3421'
  UNION ALL SELECT '1234:25'
  UNION ALL SELECT '1234:xx')
select * 
from test
where 
  expr like '%:[0-9]'
  OR expr like '%:[0-9][0-9]'
  OR expr like '%:[0-9][0-9]'
  OR expr like '%:[0-9][0-9][0-9]'
  OR expr like '%:[0-9][0-9][0-9][0-9]'
  OR expr like '%:[0-9][0-9][0-9][0-9][0-9]'
  OR expr like '%:[0-9][0-9][0-9][0-9][0-9][0-9]'
  OR expr like '%:[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
  OR expr like '%:[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
  OR expr like '%:[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
  OR expr like '%:[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
于 2013-08-02T07:21:00.333 に答える