SQL - SAP HANA - REPLACE_REGEXPR в таблице столбцов - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть несколько таблиц в 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 работает только в том случае, если я не запускаю его вместе с оператором создания таблицы столбцов, а затем создает только таблицу с одним столбцом и записи «TEST with%» в каждой строке.

Дополнительная информация:

  • Необходимо согласовать не только строку «Тест завершен», но и несколько других. Поэтому мне нужно использовать оператор замены более одного раза в этом конкретном столбце «Статус»
  • Оператор "Test is done" не равен 1: 1 с другим оператором в таблице, поэтому другие операторы никак не могут быть использованы для этого: -)

Не уверен, что создание таблицы таким способом является лучшим, но я думаю, это другая история 

Заранее спасибо за ваш вклад!

Это изображение для пояснения в комментариях: Status Entries and desired modification

1 Ответ

0 голосов
/ 13 ноября 2018

@ Майк, не могли бы вы попробовать выполнить команду 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
);

В результате получится таблица со следующими образцами данных

enter image description here

Обратите внимание, что столбец STATUS заменяется статическим текстом, если есть соответствие для данного условия. В противном случае текст 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"

Вы можете добавить это добавить новый вычисляемый столбец в сценарий определения таблицы

Я полагаю, у вас есть следующий текст статуса в ваших табличных данных:

  • Развертывание для идентификатора 234 завершено
  • Развертывание разработки
...