2017-08-01 5 views
0

数値以外のすべてのレコードを検索しようとしていますが、これにはalphabetscharachtersが含まれています。次のようにREGEXP_LIKEですべての数値を無視する

select SUBSTR(COLUMN1,8,4) 
from tmp_table 
where REGEXP_LIKE (SUBSTR(COLUMN1,8,4),'[^0-9\x]+$'); 

私は、クエリのために得る結果である:私は、私は次のクエリを実行しているように私は私がSUBSTR(COLUMN1,8,4)から取得したデータを保存するつもりです何のデータ型を決定するために、この情報が必要

918 
922S 
944 
950N 
953 
958S 
974 
977A 
994A 
995 

:私が得たデータがある

select column1 
from tmp_xsttable 
where REGEXP_LIKE (SUBSTR(COLUMN1,24,4),'[^0-9\x]+$'); 

私も使用したクエリが入力されるデータを表示するために、クエリを追加していここ

AHGLXST912 200701010000912 L000000000000000000NC0000 CA20070216 10  
AHGLXST917 200501020000917 L000000000020071231NC000001CC20090805 10  
AHGLXST918 200501020000918 L000000000020071231NC000001CC20090805 10  
AHGLXST920A200501020000920AL000000000000000000NC000001CA20050130 64  
AHGLXST921 193501010000921 L000000000000000000NH0000 DA20040901 30  
AHGLXST921D193501010000921DL000000000000000000NH0000 DA20040901 30  
AHGLXST922A192501010000922AL000000000000000000NC0000 CA20050311 64  
AHGLXST922G192501010000922GL000000000020081231NC0000 CC20090805 44  
AHGLXST922N200501020000922NL000000000000000000NC0000 CA20050517 74  
AHGLXST922S193501010000922SL000000000000000000NH0000 CA20040901 10 

tmp_tableColumn1にあるいくつかの例のデータセットです:

AHGLXST01362007061700530136L000000057000000000YH0005 RA20070619110  
AHGLXST01362011092500540136L000000057000000000YH0005 RA20110927110  
AHGLXST01362014090700950136L000000057000000000YC0009 RA20140909110  
AHGLXST01371973112800670137L000000026000000000YH0008 RC2004052011011 
AHGLXST01372006010100640137L000000026020061005YC0008 RC2006102511011 
AHGLXST01391988040600510139L000000080500000000YH0006 RC2004052021022 
AHGLXST01392007061700550139L000000080520101113YC0005 RC20101214210  
AHGLXST01401997071300560140L000000047400000000YH0006 RC2004052011011 
AHGLXST01402006042900560140L000000047400000000YH0008 RA20060426110  
AHGLXST01402007061700750140L000000047400000000YH0007 RA20070619110  

私は数値でレコードを無視しようとしていますが、私はアルファベットや文字を持つレコードと一緒にこれらの3桁の結果を得ます。 REGEXP_LIKEを変更してすべての数値を無視するにはどうすればよいですか?

+1

もう一度お試しください。タイトルでは、 "**空白**を無視する"と言うと、あなたの投稿の最初の文では、 "**数値**以外のもの"と言って、正規表現に '\ x'とにかく文字のクラスとして解釈されません - 単に数字ではない文字、スラッシュまたは小文字の 'x'を含む部分文字列を探しているだけです)。私たちにも**入力**を見せて、コードではなく平易な英語で要件を説明してください。しかし、あなた自身と矛盾しないようにしてください。 – mathguy

+0

@mathguyありがとう私は私のタイトルを変更しました。私が示した結果は、結果の一部です。私はこれらの結果が長いvarchar2の列であることを望んでいます。私はその記述の例を追加します。私はSUBSTRで文字列や文字を持っているかどうかを調べて、データ型を選択できるようにします。 – Auguster

+0

あなたが提供したデータに対してクエリを実行しませんでしたが、それはできませんあなたが示す結果を生み出す。検出しようとしている「欠陥のある」行とサンプル入力の「良い」行を含める方がはるかに良いでしょう。問題は何ですか?たとえば、918:入力に数字918の後ろに空白があり、その場合には拒否したくないと思われますか? (彼らはおそらく拒否されるべきです、または数字を挿入する場合はスペースを最初にTRIMMEDする必要があります)。 – mathguy

答えて

1

SUBSTR(COLUMN1,8,4)に少なくとも1つの非数値文字が含まれている場合、クエリで何をやっているのですか。私が何をしたいことより、このようなものですと思う:

SELECT SUBSTR(column1, 8, 4) 
    FROM tmp_table 
WHERE NOT REGEXP_LIKE(SUBSTR(column1, 8, 4), '\d'); 

上記のクエリはCOLUMN1の値が8位(つまり、文字から始まる4つの文字で数字を含まないため、すべての行を返します8 -11)。

+0

値が '123A'の場合は、 '\ d'に小数点があるので一致しません。これらの値を正確に取得したい場合でもフィルタリングされます。 – LauDec

+0

おそらくOP –

+0

が誤解されている可能性があります。それは私です。私は彼が 'REGIMP_LIKE(TRIM(SUBSTR(COLUMN1,8,4))、 '[^ 0-9]')' – LauDec

関連する問題