如何使用sql按字母顺序对单词进行排序

bybem2ql  于 2021-06-20  发布在  Mysql
关注(0)|答案(4)|浏览(647)

我有一个sql表,它有这样的字符串“sapa to hanoi”。
我想把它改成“河内到萨帕”,因为在排列字母顺序时,“河内”应该排在第一位。
如何在sql中实现它?

798qvoo8

798qvoo81#

我们可以用 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;

演示

nfzehxib

nfzehxib2#

好吧,如果你只有两个部分,你可以重建字符串:

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)
             )

不过,我建议你把这两个城市的名字放在不同的栏里。然后在检索数据时构造字符串。

sd2nnvve

sd2nnvve3#

三个字?比较第一个单词和最后一个单词,如果顺序不对,就用不同的方法缝合。
例子:

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

在此处测试

34gzjxbg

34gzjxbg4#

这是产生这种查询的另一种方法:

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

由三个单词组成的字符串。

相关问题