2017-11-05 6 views
0

LRTIMを使用して文字列の一部を取得しようとしています。Oracle LTRIMのトリミングが多すぎる

これは私が使用しているコードです。

SELECT 
C.MANUFACTURER, 
C.MODEL_GROUP, 
LTRIM(C.VARIANT, C.MANUFACTURER || ' ' || C.MODEL_GROUP), "VAR DESC" 
C.VARIANT 
FROM STD_BI.RL2_CONTRACTS_VW C 

これは私が賢明

VARIANT 
AUDI A3 DIESEL SPORTBACK 2.0 TDI SE Technik 5dr Manual 150 

MANUFACTURER 
AUDI 

MODEL_GROUP 
A3 

これは、私は問題である、DIESELの最初の2つの文字をカットされ

MANUFACTURER MODEL_GROUP VAR DESC 

AUDI   A3   ESEL SPORTBACK 2.0 TDI SE Technik 5dr Manual 150  

を取得していた結果フィールドをあるてきたものですこれはすべての場合に起こっていないということです。時にはそれは1文字を切り捨てていることもあります。

私はスペースを探している、すなわち、これを達成する他の方法を検討しているが、複数のスペースを持っている他のメーカーとモデルグループがそうVARIANTフィールド(列)

からメーカーとMODEL_ROUPを引くしようとしていたきましたなぜこれが起こっているのか、これを達成するための他の提案は非常に高く評価されます。

謝罪は、エディタのように思える事前に

多くのおかげで、

キースは、単一のセットを、私は

Oracle query result

答えて

0

に展開

case when SUBSTR(s,1,LENGTH(p))=p then SUBSTR(s,LENGTH(p)+1) else s end 

のようなものをプレフィックスpを除去するために

SELECT 
C.MANUFACTURER, 
C.MODEL_GROUP, 
REGEXP_REPLACE(C.VARIANT, '^'||C.MANUFACTURER || ' +' || C.MODEL_GROUP) "VAR DESC", 
C.VARIANT 
FROM STD_BI.RL2_CONTRACTS_VW C 
0

LTRIMの2番目のパラメータを取得していた結果をされ再フォーマットされます文字、一連の文字ではありません。あなたの例では、EDIESELである( 'A'、 'U'、 'D'、 'I'、 'A'、 '3')ではない最初の文字が出現するまで、 。文字列の開始を示す - 文字列s使用からあなたのケースであなたが'^'REGEXP_REPLACEを使用することができます

case when SUBSTR(C.VARIANT, 1, LENGTH(C.MANUFACTURER || ' ' || C.MODEL_GROUP)) 
      =       C.MANUFACTURER || ' ' || C.MODEL_GROUP 
    then SUBSTR(C.VARIANT, 1+ LENGTH(C.MANUFACTURER || ' ' || C.MODEL_GROUP)) 
    else s 
end 
関連する問題