如何根据特定条件拆分列

时间:2018-12-17 18:17:18

标签: sql hana

我想使用HANA数据库视图SQL拆分列,如下所示:

本质上,一列在4个值之后的字符串中的值分别为1000、100或100

例如:

ABCD1000XYZ
ABCD100XYZ
ABCD10XYZ

我需要将列拆分为

ABCD 1000 XYZ
ABCD 100 XYZ
ABCD 10 XYZ 

enter image description here

1 个答案:

答案 0 :(得分:1)

用于识别不同组的正则表达式如下

(^.{4})(1[0]{1,})([A-Z0-9 ]*)(D.*$)

每个组在()内

要提取选择中的每个组,您需要使用此reg表达式4次(或3次,如下所示),然后每次选择一个组(列)

SUBSTRING_REGEXPR('(^.{4})(1[0]{1,})([A-Z0-9 ]*)(D.*$)' IN text_name GROUP 1)

因此Sql查询将是

SELECT SUBSTRING_REGEXPR('(^.{4})(1[0]{1,})([A-Z0-9 ]*)(D.*$)' IN text_name GROUP 1) AS Col1,
       SUBSTRING_REGEXPR('(^.{4})(1[0]{1,})([A-Z0-9 ]*)(D.*$)' IN text_name GROUP 2) AS Col2,
       SUBSTRING_REGEXPR('(^.{4})(1[0]{1,})([A-Z0-9 ]*)(D.*$)' IN text_name GROUP 3) AS Col3, 
       SUBSTRING_REGEXPR('(^.{4})(1[0]{1,})([A-Z0-9 ]*)(D.*$)' IN text_name GROUP 4) AS Col4
FROM some_table

由于第一列始终是字符的4,因此可以通过常规的SUBSTRING调用将其提取出来

SELECT SUBSTRING(text, 1, 4) AS Col1, ...

我希望这对您有所帮助,因为我没有访问SAP Hana的权限,因此尽管对正则表达式进行了测试,但Sql尚未经过测试。 编辑,我注意到您在第四行中有一个空格,因此我将其添加到reg表达式中。