【问题标题】:SQL - SAP HANA - REPLACE_REGEXPR in Column tableSQL - SAP HANA - 列表中的 REPLACE_REGEXPR
【发布时间】:2019-04-15 01:18:01
【问题描述】:

我在 SAP HANA 和“创建列表”上有一些表来组合多个“原始表”,并且需要从新创建的表中的一列中替换字符串。表名“Testsubject_status” 列名“STATUS”。 我需要替换字符串的原因是为了在特定条目上获得统一的措辞。 通过以下示例,希望我的意思更清楚:

表名:Testsubject_status --- 列:状态

  • 测试我
  • 测试他
  • 使用 ID 1237 的测试已完成
  • 测试她
  • 使用 ID 928162 的测试已完成
  • 使用 ID 991 的测试已完成

结果应该是

表名:Testsubject_status --- 列:状态

  • 测试我
  • 测试他
  • 测试完成
  • 测试她
  • 测试完成
  • 测试完成

我尝试了以下方法:

CREATE COLUMN TABLE SCHEMATTT.Testsubject_status AS (
    Select
        Table1.Person AS “Person”,
        Table1.Vers AS “Vers”,
        Table2.Flnr AS “Flnr”,
        Table3.Status AS “Status”
FROM 
    SCHEMATTT.Table1, SCHEMATTT.Table2, SCHEMATTT.Table3 
WHERE SCHEMATTT.Table1.Person = SCHEMATTT.Table2.Person
AND SCHEMATTT.Table2.Flnr = SCHEMATTT.Table3.Flnr


SELECT
REPLACE_REGEXPR (‘with the id \d{1,}’ IN ‘TEST with %’ WITH ‘’) “replace_regexpr”
FROM SCHEMATTT.Testsubject_status
);

正在创建表。 Replace_Regexpr 语句仅在我不与 create column table 语句一起运行时才有效,然后仅创建一个包含一列的表,并且在每一行中都有条目“TEST with %”。

附加信息:

  • 不仅需要协调“测试完成”字符串,还有其他一些字符串。所以我需要在这个特定的列“状态”中多次使用替换语句
  • “测试完成”语句与表中的另一个语句不是 1:1 的,因此不能以任何方式使用其他语句来执行此操作:-)

不确定以这种方式创建表格是否最好,但我想那是另一回事

提前感谢您的意见!

此图片用于在 cmets 中进行澄清:

【问题讨论】:

    标签: sql sap hana


    【解决方案1】:

    @Mike,请您尝试以下 SQLScript 命令

    CREATE COLUMN TABLE Testsubject_status2 AS (
    Select
        Table1.Person AS "Person",
        Table1.Vers AS "Vers",
        Table2.Flnr AS "Flnr",
        Table3.Status AS "Status",
        REPLACE_REGEXPR ('test with the id [[:digit:]]* is done' FLAG 'i' IN Table3.STATUS WITH 'Test is done') "replace_regexpr"
    FROM 
       Table1, Table2, Table3 
    WHERE Table1.Person = Table2.Person
    AND Table2.Flnr = Table3.Flnr
    );
    

    这将生成一个包含以下示例数据的表格

    请注意,如果给定条件匹配,则 STATUS 列将替换为静态文本。否则,状态文本将保持原样

    对于附加信息,我添加了以下表达式,但我不太喜欢它 也许有更好的解决方案

    REPLACE_REGEXPR (
        '(test with the id|Deployment for the ID) [[:digit:]]* is (done|completed)' 
        FLAG 'i' 
        IN Table3.STATUS 
        WITH 
            case 
                when Table3.STATUS LIKE_REGEXPR('test') Flag 'i' then 'test is done' 
                when Table3.STATUS LIKE_REGEXPR('deploy') Flag 'i' then 'deployment is done' 
                else Table3.STATUS
            end 
    )  as "replace_regexpr_ext"
    

    你可以在你的表定义脚本中添加一个新的计算列

    我假设您的表格数据中有以下状态文本:

    • ID 234 的部署已完成
    • 部署开发

    【讨论】:

    • 非常感谢Eralper,真的!声明终于奏效了!正如我帖子的“附加信息”部分所述,我还需要替换其他字符串,如“测试已完成”。如果我将 REPLACE_REGEXPR 语句放在 CASE WHEN Table3.Status 中,如“使用 ID % 进行测试”完成'然后 REPLACE_REGEXPR ('用 id [[:digit:]]* 完成测试' FLAG 'i' IN Table3.STATUS WITH 'Test is done') "replace_regexpr" ELSE WHEN xxxxx ELSE WHEN xxx ELSE Table3.STATUS end as replace_regexpr FROM Table3 我在 """ 错误消息附近收到语法不正确。你知道问题可能是什么吗?
    • 我添加了一个新表达式,您可以在代码中将其用作单独的列数据,希望对您有所帮助
    • 再次,非常感谢 Eralper,也许我对不同状态条目的措辞不够清楚。不仅像您假设的那样具有这种模式。仅举几例:测试 [[with the ID 1237]] is done, Ticketnumber[[: 9G62J]], [[OE_1559C: ]]New RSKT.... 在这些示例中,需要删除的部分被标记在 [[]] …。很抱歉造成误解,再次感谢您的患者和帮助!编辑:我有大约 20 种不同的措辞需要协调
    • 那么你想在输出中看到什么?您可以使用“|”管道符号搜索状态中的静态文本,但如果您想修改输出,那么也许我们应该使用占位符
    • Test [[with the ID 1237]] is done 应该是 Test is done - Ticketnumber:9G62J 应该是 Ticketnumber - OE_1559C: 新 RSKT 应该是新 RSKT
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2018-05-31
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多