2016-06-28 4 views
0

次の表があります。別のSQLの列の部分文字列

+--------------------+-----+ 
|fardet_cd_fare_basis|part2|  
+--------------------+-----+ 
|   MEO00RIG| 00R| 
|   MEO00RIG| RIG| 
|   MEO00RIG| I| 
+--------------------+-----+ 

私は「その2」の外観、例のようになりまで「fartdet_cd_fare_basis」からチェーンの最初の部分を抽出する必要があります:私はスパークSQLで働いている

+--------------------+-----+--------+ 
|fardet_cd_fare_basis|part2|  num| 
+--------------------+-----+--------+ 
|   MEO00RIG| 00R|  MEO| 
|   MEO00RIG| RIG| MEO00| 
|   MEO00RIG| I| MEO00RI| 
+--------------------+-----+--------+ 

が、私はSQLソリューションを使用しました。何か案は?

+0

予想される出力を再度正しく説明できますか?理解するのは難しいです。また、サンプルデータの出力には1行しか必要ありませんか?はいの場合は論理は何ですか、いいえの場合は、何や理由が他の行の出力である必要があります。 – Utsav

+0

今より良く理解できますか? – nest

+0

今私は答えました。それがあなたのために働いていたら、答えを受け入れて質問が閉じられるようにしてください。 – Utsav

答えて

1

私はあなたが欲しいものを理解していると思います。これを試して。

LiveDemo

select fardet_cd_fare_basis,part2, 
    substr(
      fardet_cd_fare_basis, 
      1, 
      instr(fardet_cd_fare_basis,part2)-1 
     ) as der_sub 
from your_table 

出力

+----------------------+--------+---------+ 
| fardet_cd_fare_basis | part2 | der_sub | 
+----------------------+--------+---------+ 
| MEO00RIG    | (null) | (null) | 
| MEO00RIG    | O  | ME  | 
| MEO00RIG    | 00R | MEO  | 
| MEO00RIG    | RIG | MEO00 | 
| MEO00RIG    | 00  | MEO  | 
| MEO00RIG    | I  | MEO00R | 
| MEO00RIG    | R  | MEO00 | 
| MEO00RIG    | 00  | MEO  | 
+----------------------+--------+---------+ 

注:part2は最初の列に存在しない場合は、出力には何も得ることはありません。また、part2がNULLの場合、nullとなります。必要に応じて個別に処理することができます。

+0

ありがとうございました。可能であれば、このレスポンスsql sparkを実装しようとします。誰かがそれを行う方法を知っていれば... – nest

関連する問題