红移后特殊符号后的计数?

时间:2017-09-29 07:09:26

标签: amazon-redshift

我的字段值具有以下格式:

GPU#nDisplays:Intel(R) Iris(TM) Graphics 540#1 Microsoft Basic Render Driver#0

现在我想在'#'之后想要一个值的总和。例如,在这种情况下,我的总和将是1 + 0 = 1。

如何使用Redshift SQL查询获得该功能?

我尝试过这样的事情开头:

(regexp_count(REGEXP_SUBSTR (cpu_params,'GPU#n[^,]*'),'#[0-9]')

1 个答案:

答案 0 :(得分:0)

您可以将Redshift python UDF用于此

Here is the AWS documentation

重要 - 您需要:

revoke usage on language PLPYTHONU from PUBLIC;
grant usage on language PLPYTHONU to group udf_devs;
or
grant usage on language PLPYTHONU to user youruserid;

请原谅我的非pythonic python代码 - 我相信这可以改进。

只需将“yourstring”替换为测试字符串,然后在Redshift中运行以下命令。

create or replace function f_sum_after_hash (s varchar(max))
  returns integer
stable
as $$
def f_sum_after_hash(input_string):
    parts = input_string.split("#")
    score = 0
    for part in parts[1:]:
        index=0
        for c in part:
            if c.isdigit():
                index+=1
            else:
                break
        if index >0:
            score+=int(part[:index])
    return score
return f_sum_after_hash(s)
$$ language plpythonu;

select f_sum_after_hash ('yourstring');