как отсортировать слово в жале отсортировано в алфавитном порядке с помощью sql - PullRequest
0 голосов
/ 02 сентября 2018

У меня есть таблица SQL, в которой есть такие строки: «Сапа в Ханой».

Я хочу изменить его на "Ханой-Сапа", потому что "Ханой" должен стоять первым при сортировке по алфавиту.

как я могу сделать это в SQL?

Ответы [ 4 ]

0 голосов
/ 02 сентября 2018

Это еще один способ произвести такой запрос :

select group_concat(distinct str_ separator ' ') as str
  from
(  
 select str_ from ( 
   select 
          q.n, 
          substring_index(substring_index(str, ' ', n), ' ', -1 ) as str_
     from tab
    inner join ( select ordinal_position as n
                   from INFORMATION_SCHEMA.COLUMNS t
                  where table_name='COLUMNS' ) q
       on char_length(str) >= n - 1
  ) q1
  order by str_  
) q2;

str
-------------
Hanoi Sapa to

для строки, состоящей из трех слов.

0 голосов
/ 02 сентября 2018

Мы можем использовать SUBSTRING_INDEX для лексикографического сравнения двух названий городов, а затем поменять местами, если второе имя принадлежит первому.

SELECT
    field,
    CASE WHEN SUBSTRING_INDEX(field, ' to ', 1) < SUBSTRING_INDEX(field, ' to ', -1)
         THEN FIELD
         ELSE CONCAT(SUBSTRING_INDEX(field, ' to ', -1), ' to ', SUBSTRING_INDEX(field, ' to ', 1)) END AS new_field
FROM yourTable;

Демо

0 голосов
/ 02 сентября 2018

за 3 слова? Сравните первое слово с последним и прошейте их по-разному, если порядок неправильный.

Пример:

SELECT col, 
CASE 
WHEN (LENGTH(TRIM(col)) - LENGTH(REPLACE(TRIM(col), ' ', ''))+1) = 3 AND SUBSTRING_INDEX(TRIM(col),' ',1) > SUBSTRING_INDEX(TRIM(col),' ',-1)
THEN CONCAT(
  SUBSTRING_INDEX(TRIM(col),' ',-1), ' ', 
  SUBSTRING_INDEX(
   SUBSTRING_INDEX(TRIM(col),' ',2),' ',-1), 
   ' ',SUBSTRING_INDEX(TRIM(col),' ',1)) 
ELSE col 
END as sorted
FROM
(
    select 'Foo to Bar' as col 
    union all select 'Bar to Foo' 
    union all select 'Foo'
) q

Тест здесь

0 голосов
/ 02 сентября 2018

Ну, если у вас просто две части, вы можете восстановить строку:

select concat(least( substring_index(col, ' to ', 1), substring_index(col, ' to ', -1),
              ' to ',
              greatest( substring_index(col, ' to ', 1), substring_index(col, ' to ', -1)
             )

Тем не менее, я бы рекомендовал, чтобы вы указали два названия городов в отдельных столбцах. Затем создайте строку при извлечении данных.

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