来自另一个SQL的列的子字符串

时间:2016-06-28 09:27:00

标签: mysql sql apache-spark apache-spark-sql

我有下表。

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

我需要从“fartdet_cd_fare_basis”中提取链的第一部分,直到出现“part2”,例如:

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

我正在使用Spark SQL,但我使用的是sql解决方案。有什么想法吗?

1 个答案:

答案 0 :(得分: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。如果需要,您可以单独处理它们。