2017-06-26 5 views
1

Oracle SQLを使用して、テーブル内の4つの数字の最初のシーケンスを検索する必要があります。我々は値を見つけることができますinput_file_name塔内Oracle SQLを使用した文字列の最初の4つの数字の検索

RVSP_040517.M 
SERIES_040517_CP.TXT 
SAUDE_O10N0505.M 
SERIES_040517.txt 
RVSP_080517.M 
SERIES_080517_CP.TXT 

私たちが見ることができるように、そこの前に数字のグループですが、左からの4つの数値の最初のグループは、私が欲しいものです。私はこの日口(4)の数字で新しい列を作成したい。

どうすればいいですか?

私はこのテーブルから期待していた結果は次のとおりです。

0405 
0405 
0505 
0405 
0805 
0805 

私はINSTRを使用しようとしていたが、それはさらにいくつかの文字列にして

答えて

2
select ..., regexp_substr(input_file_name, '\d{4}') as day_month, ... 
from ... 

デモ(働いていませんでした連続した4桁の部分文字列がない場合、またはその部分文字列が2回以上出現した場合の動作を示します。

with 
    test_data (input_file_name) as (
     select 'RVSP_040517.M'  from dual union all 
     select 'SERIES_040517_CP.TXT' from dual union all 
     select 'SAUDE_O10N0505.M'  from dual union all 
     select 'SERIES_040517.txt' from dual union all 
     select 'RVSP_080517.M'  from dual union all 
     select 'SERIES_080517_CP.TXT' from dual union all 
     select 'mathguy wins'   from dual union all 
     select 'GOOD_031.pdf'   from dual union all 
     select 'FOUR_DIGITS_123_4' from dual union all 
     select 'A22409_11230.cpp'  from dual 
    ) 
-- End of simulated data (for testing purposes only, not part of the solution). 
-- SQL query begins BELOW THIS LINE. 
select input_file_name, regexp_substr(input_file_name, '\d{4}') as day_month 
from test_data 
; 

INPUT_FILE_NAME  DAY_MONTH   
-------------------- ------------ 
RVSP_040517.M   0405     
SERIES_040517_CP.TXT 0405     
SAUDE_O10N0505.M  0505     
SERIES_040517.txt  0405     
RVSP_080517.M   0805     
SERIES_080517_CP.TXT 0805     
mathguy wins        
GOOD_031.pdf        
FOUR_DIGITS_123_4 
A22409_11230.cpp  2240 
関連する問題