varchar フィールドから、ちょうど 4 つの数字で終わる値のみを取得する必要があります。たとえば、SMITH0821 は必要ですが、SMITH1 は必要ありません。
4 に答える
次のように REGEXP_LIKE を使用できます。
select *
from YourTable t
where REGEXP_LIKE(t.YourField, '.*[^:digit:][:digit:]{4}', 'n');
正規表現の構文については完全にはわかりませんが、 REGEXP_LIKE のドキュメントと正規表現の付録を使用して、ニーズに合わせて調整できるはずです。
@Andrew Logvinovには、一致する数字が多すぎることについての有効なポイントがあります。数字ではない文字クラスをチェックすることで、それを否定できると思います。これにより、正規表現が次のように変更されます。
REGEXP_LIKE(t.YourField, '.*[^:digit:][:digit:]{4}', 'n');
また、数字の前に文字が必要なのか、4桁のvarcharも一致する必要があるのか わかりません。次の正規表現には、文字列アンカーの start ( ^
) と end ( $
) が含まれています (上記の式でも必要になる場合があります)。式の残りの部分には、数字以外で終わる限り、任意の文字列で構成されるオプションのグループが最初に含まれます。そのオプションのグループの後、値の終わりの直前に 4 桁が必要です。
REGEXP_LIKE(t.YourField, '^(.*[^:digit:])?[:digit:]{4}$', 'n');
残念ながら、現時点ではそれらをテストすることはできません。また、Oracle で正規表現を頻繁に使用するわけではないので、うまくいくことを願っています。
regexp_like を使用:
select * from tablename t
where regexp_like(t.columname, '[:alpha:][:digit:]{4}$')
これにより、ユーザー名の末尾に英字と 4 桁の数字が続くことが保証されます。
まともなドキュメントへのリンクは次のとおりです。http://psoug.org/reference/regexp.html
以下のように、 4 つのアンダースコアを使用_
して、Smith の後の 4 文字に一致させることができます。
SELECT * from PERSON
WHERE NAME LIKE 'SMITH____'
またはREGEXP_LIKE
(documentation here ) を使用して、4 桁のみを次のように一致させます。
SELECT * from PERSON
WHERE REGEXP_LIKE (NAME , '^SMITH[0-9]{4}$', 'i');
'i'
大文字と小文字を区別しないマッチングに使用されます。
これはうまくいきます:
select field2 from T1
where SUBSTR(field2, -4, 1) IN ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9') AND
SUBSTR(field2, -3, 1) IN ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9') AND
SUBSTR(field2, -2, 1) IN ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9') AND
SUBSTR(field2, -1, 1) IN ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');