Есть ли способ использовать порядок, чтобы упорядочить похожие поля вместе? - PullRequest
0 голосов
/ 08 июня 2018

Есть ли способ сделать аналогичные значения эквивалентными в порядке?

Скажем, данные:

name  | number
John. | 9
John  | 1
John. | 2
Smith | 4
John  | 3

Я бы хотел упорядочить по имени, а затем по номеру, чтобы результат выглядел следующим образом, но order by name, number поместит все Johnзаписи впереди John. записей.

name  | number
John  | 1
John. | 2
John  | 3
John. | 9
Smith | 4

Ответы [ 3 ]

0 голосов
/ 08 июня 2018
0 голосов
/ 08 июня 2018

Используйте функцию замены регулярных выражений, чтобы удалить все специальные символы в ваших данных, заменив их пробелом.Затем оберните это в функцию 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;
0 голосов
/ 08 июня 2018

Вам понадобится более продвинутая обработка в поле имени.Этот раздел поможет вам удалить не алфавитные символы из строки перед заказом: Как вырезать все не алфавитные символы из строки в SQL Server?

Но тот факт, что вам нужен такойСложная функция заставляет меня усомниться в самом процессе построения вашей базы данных: «Джон» и «Джон».это одно и то же лицо, они должны иметь одинаковое имя.Так что если "."важно, это означает, что вам нужно другое поле для хранения информации, которую оно представляет.

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