SQL регулярные выражения - удаление точки
просьба подсказать, что делаю не так. Суть в том, что необходимо из таблицы dealer в столбце contract удалить все символы, которые идут в конце строки, и могут содержать (".","..","","/","_") В столбце контракт есть такие значения:
- 100001-04..
- 100003-04.
- 100004-04./пилот
- 100005-04/пилот
- 100006-04\пилот
- 100007-04.\пилот
- 100008-04..
- 100008-04_
В результате все символы и любой текст, что идет после "-04", должны быть удалены.
Использую следующий запрос:
SELECT
(
case
when contract like '%/%' then regexp_replace(contract,'\\.*$','') -- ищем символ "/" и заменяем его и все что идет после пустой строкой
when contract like '%\\%' then regexp_replace(contract,'\\.*$','') -- ищем символ "\" и заменяем его и все что идет после пустой строкой
when contract like '%_%' then regexp_replace(contract,'\_*$','','g') -- ищем символ "_" и заменяем его и все что идет после пустой строкой
when contract like '%.' then regexp_replace(contract, '\\.\\s*$', '') -- ищем точку "." и заменяем ее и все что идет после пустой строкой
else contract -- если ничего не нашли выводим как есть
end
) as contract
FROM dealer as t1
В итоге код работает на всем, кроме "." и ".." В таблице все равно остаются записи
- 100001-04..
- 100003-04.
Н совесм понимаю, как от них избавится. БД POSTGRESQL
Ответы (1 шт):
Автор решения: Akina
→ Ссылка
WITH cte (raw_value) AS (
SELECT '100001-04..' UNION ALL
SELECT '100003-04.' UNION ALL
SELECT '100004-04./пилот' UNION ALL
SELECT '100005-04/пилот' UNION ALL
SELECT '100006-04\пилот' UNION ALL
SELECT '100007-04.\пилот' UNION ALL
SELECT '100008-04..' UNION ALL
SELECT '100008-04_'
)
SELECT raw_value, regexp_replace(raw_value, '^(.*\d)\D*$', '\1') clear_value
FROM cte
| raw_value | clear_value |
|---|---|
| 100001-04.. | 100001-04 |
| 100003-04. | 100003-04 |
| 100004-04./пилот | 100004-04 |
| 100005-04/пилот | 100005-04 |
| 100006-04\пилот | 100006-04 |
| 100007-04.\пилот | 100007-04 |
| 100008-04.. | 100008-04 |
| 100008-04_ | 100008-04 |
Попросту отрезаем с задницы все нецифровые символы.