Используйте функцию замены регулярных выражений, чтобы удалить все специальные символы в ваших данных, заменив их пробелом.Затем оберните это в функцию TRIM для удаления пробелов
TRIM(CASE
WHEN name LIKE '%.%'
OR name LIKE '%_%'
OR name ~ '%\d%' --This is for a number
THEN
REGEXP_REPLACE(name, '(\_|\.|\d)', ' ' ) END) AS name_processed
Бит в скобках означает замену подчеркивания или (|) точки или цифры на то, что следует после запятой, а здесь пробел
Теперь вы можете упорядочить по имени и по номеру
ORDER BY name_processed, number DESC
Но вы всегда можете сохранить исходное имя в SELECT впоследствии, если вы сначала написали подзапрос через WITH.Дайте мне знать, если вы хотите сделать это.По сути, синтакс будет:
WITH processed_names AS (
SELECT
name,
TRIM(CASE
WHEN name LIKE '%.%'
OR name LIKE '%_%'
OR name ~ '%\d%' --This is for a number
THEN
REGEXP_REPLACE(name, '(\_|\.|\d)', ' ' ) END) AS name_processed,
number
FROM names
ORDER BY 2,3 DESC)
SELECT
name,
number
FROM processed_names;