У меня есть поле с записями, которые могут быть 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)
Я не могу дать весь запрос или данные, поскольку они являются конфиденциальными данными, но любые предложения будут хорошими.