select substr_regexpr( '.*-([^-]*-[^-]*)$' in 'varia-ble---part-part1-part2' group 1) from dummy;
select substr_regexpr( '.*-([^-]*-[^-]*)$' in 'variable-part-part1-part2' group 1) from dummy;
SELECT SCHEMA.FN_SUBSTRING_INDEX(id,obtainedPosition) INTO ReturnValue FROM DUMMY;
CREATE FUNCTION FN_SUBSTRING_INDEX
(
id VARCHAR(500),
delim VARCHAR(2)
)
RETURNS SplitString VARCHAR(500)
LANGUAGE SQLSCRIPT AS
BEGIN
DECLARE reversedString VARCHAR(500);
DECLARE charString VARCHAR(2);
DECLARE i INT := LENGTH(:id);
DECLARE len INT := LENGTH(:id);
DECLARE obtainedPosition INT := 0;
DECLARE flag INT := 0;
reversedString := '';
--loop to reverse the inputstring
WHILE :i > 0
DO
reversedString = CONCAT(:reversedString, SUBSTRING(:id,:i,1));
i := :i - 1;
END WHILE;
--loop to get the second delimiter position
i := 1;
WHILE :i <= :leng
DO
charString := '';
charString := SUBSTRING(:reversedString,i,1);
IF((:charString = :delim ) AND (:flag < 2)) THEN
BEGIN
obtainedPosition := :i;
flag := :flag + 1;
END;
END IF;
i := :i + 1;
END WHILE;
--IF condition to check if at least 2 delimiters are available, else print complete string
IF(flag = 2) THEN
obtainedPosition := :len - :obtainedPosition + 2; --2 is added to avoid the character at that position and '-' from printing
ELSE
obtainedPosition := 1;
END IF;
--SplitString contains the string's splitted return value
SELECT SUBSTRING(:id,:obtainedPosition) INTO SplitString FROM DUMMY;
END;
DO
BEGIN
DECLARE id VARCHAR(500) := 'Test-sam-ple-func';
DECLARE delim VARCHAR(2) := '-';
SELECT SCHEMA.FN_SUBSTRING_INDEX(id,delim) AS "SplitStringIndex" FROM DUMMY;
END;
2条答案
按热度按时间4dc9hkyq1#
这可以使用正则表达式来完成:
根据HANA 2.0 SP0文档,您可以使用带有负偏移量的locate(然后使用right()),但这在我的系统上不起作用(“......不支持该功能......”)
如果你定期对大量记录执行这样的查询,我建议你在ETL过程中将你感兴趣的部分提取到一个单独的字段中。或者,使用“始终生成为..."填充一个单独的字段。我不止一次看到过,人们在复杂的SQL查询或复杂的CalcView中计算这样的字段,然后想知道为什么在选择1亿条记录并对计算字段进行筛选等操作时性能会很差......当您将中间结果集聚合到一个合理的大小,然后应用“昂贵”的函数时,性能通常不会有问题。
8mmmxcuj2#
我不认为SAP HANA中有任何像SUBSTRING_INDEX这样的直接函数,但您可以创建一个函数来传递输入字符串和分隔符。
我在SUBSTRING_INDEX中假设并提供解决方案
反转字符串,并将第二个分隔符(在本例中为“-”)的位置设置为“obtainedPosition”
现在从字符串的长度中减去“obtainedPosition”。
在内置子字符串函数中使用该值,可以获得所需的字符串并从函数返回。
以上函数由http://www.kodyaz.com/sap-abap/sqlscript-reverse-string-function-in-sap-hana.aspx修改而来
有关SAP HANA中的字符串函数,请参阅以下内容:http://www.sapstudent.com/hana/sql-string-functions-in-sap-hana/3
您可以在SAP HANA中使用匿名块来调用和检查函数
我很高兴知道投反对票的理由