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
Источник: Stack Overflow на русском