Redshift Вставка символов в строку во время запроса на основе оператора CASE - PullRequest
0 голосов
/ 15 января 2020

У меня есть поле с записями, которые могут быть 3 буквы 1,2 или 3 цифры. НАПРИМЕР. AAA1 AAA01 AAA001

Мне нужно стандартизировать вывод в моем запросе, чтобы всегда быть 6 символов.

Поэтому мне нужен хороший оператор case. Вот что я попробовал.

CASE WHEN LENGTH(field1) = 4 THEN LEFT(field1,3)||00||RIGHT(field1,1) WHEN LENGTH(field1) = 5 THEN LEFT(field1,3)||0||RIGHT(field1,2) ELSE field1 as field1

Это всегда приводило к тому, что AAA1 выходил как AAA01 вместо AAA001

Я пробовал это в надежде на другой результат:

CASE WHEN field1 ~ '[A-Z]{3}[0-9]{1}' THEN LEFT(field1,3)||00||RIGHT(field1,1) WHEN LENGTH(field1) = 5 THEN LEFT(field1,3)||0||RIGHT(field1,2) ELSE field1 END AS field1

, который ничего не сделал правильно, в результате чего поля, которые уже были правильными, были неправильными.

Так что я перепутал с REGEX и попытался

CASE WHEN field1 ~ '^([A-Z]{3}[0-9]{1})$' THEN LEFT(field1,3)||00||RIGHT(field1,1) WHEN field1 ~ '^([A-Z]{3}[0-9]{2})$' THEN LEFT(field1,3)||0||RIGHT(field1,2) ELSE field1 END AS field1

, который вернулся ко всем AAA1 в результате получается AAA01, а все остальное корректно.

Теперь я делаю объединение и пытаюсь также дедуплицировать объединение с помощью

WHERE NOT EXISTS (SELECT table2.field3 FROM table2 WHERE table1.field3 = table2.field3 AND table2.field10 IS NOT NULL)

Я не могу дать весь запрос или данные, поскольку они являются конфиденциальными данными, но любые предложения будут хорошими.

Ответы [ 2 ]

1 голос
/ 15 января 2020

Я не думаю, что вам нужно какое-либо утверждение или регулярное выражение для этого. Вот что я придумал:

select left(field,3)||lpad(substring(field,4),3,'0')
0 голосов
/ 15 января 2020

Ответ в том, что, очевидно, 00 - это не то, что ему нравится.

сработало следующее:

CASE WHEN field1 ~ '^([A-Z]{3}[0-9]{1})$' THEN LEFT(field1,3)||0||0||RIGHT(field1,1) WHEN field1 ~ '^([A-Z]{3}[0-9]{2})$' THEN LEFT(field1,3)||0||RIGHT(field1,2) ELSE field1 END AS field1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...