【问题标题】:Split delimited string in SAP HANA在 SAP HANA 中拆分分隔字符串
【发布时间】:2018-02-26 19:44:33
【问题描述】:

我正在使用 HANA 1.0 SPS12。有没有办法在 SAP HANA 中拆分分隔字符串。

我有管道分隔的字符串 -

v_input = '1111|2222|3333|4444'

我需要根据分隔部分的位置输出 -

select seperate_string(v_input,pos) from dummy;

例如

select seperate_string('1111|2222|3333|4444',1 ) from dummy; --1111
select seperate_string('1111|2222|3333|4444',2 ) from dummy; --2222
select seperate_string('1111|2222|3333|4444',3 ) from dummy; --3333

是否可以使用 SUBSTR_REGEXP 做到这一点?

我尝试了下面的编码,但它不起作用 -

select SUBSTR_REGEXPR('[^\|]+' IN '1111|2222|3333|4444' GROUP 1 ) from dummy;

【问题讨论】:

    标签: sql regex hana


    【解决方案1】:

    是的,你可以试试下面的 SUBSTRING_REGEXPR()

    SELECT SUBSTRING_REGEXPR('[^|]+' IN '1111|2222|3333|44|555' FROM 1 OCCURRENCE 4) from dummy;
    --44
    
    SELECT SUBSTRING_REGEXPR('[^|]+' IN '1111|2222|3333|44|555' FROM 1 OCCURRENCE 2) from dummy;
    --2222
    

    【讨论】:

      【解决方案2】:

      是的,SUBSTR_REGEXPR() 可以做到这一点。

      select SUBSTR_REGEXPR('(.+)\|(.+)\|(.+)\|(.+)' IN  '1111|2222|3333|4444' GROUP 1 ) from dummy;  
      -- 1111
      select SUBSTR_REGEXPR('(.+)\|(.+)\|(.+)\|(.+)' IN  '1111|2222|3333|4444' GROUP 2 ) from dummy;  
      -- 2222
      select SUBSTR_REGEXPR('(.+)\|(.+)\|(.+)\|(.+)' IN  '1111|2222|3333|4444' GROUP 3 ) from dummy;  
      -- 3333
      select SUBSTR_REGEXPR('(.+)\|(.+)\|(.+)\|(.+)' IN  '1111|2222|3333|4444' GROUP 4 ) from dummy;  
      -- 4444
      

      正则表达式在 | 之前和字符串末尾的字符上构建四个匹配组。 SUBSTR_REGEXPR() 函数中的GROUP x 参数指定应返回哪个匹配组。

      【讨论】:

      • 感谢@Lars...但这仅适用于四个组。我可以为不同数量的组指定模式吗
      • 不,这不可能,也不是您最初要求的。
      • 为此编写自己的函数可能就是其中之一。除此之外,您在收到答案后开始关闭您的一些问题怎么样?
      • 根据 SUBSTR_REGEXP 的 SAP 文档还有一件事,它说 SAP HANA 支持 Perl 兼容正则表达式。所以它应该支持 Oracle 等支持的模式。我在 Oracle 中使用 REGEXP_SUBSTR('A|B','[^\|]+',2) 时得到了结果。为什么它在 SAP HANA 中不支持相同的模式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-08
      • 2014-06-29
      • 1970-01-01
      • 2019-09-19
      相关资源
      最近更新 更多