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

时间:2018-09-02 08:27:25

标签: mysql sql

我有一个包含此类字符串“ Sapa to Hanoi”的SQL表。

我想将其更改为“河内到萨帕”,因为在对字母顺序进行排序时,“河内”应该排在第一位。

如何在SQL中完成?

4 个答案:

答案 0 :(得分:1)

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

Demo

答案 1 :(得分:0)

好吧,如果只有两部分,则可以重构字符串:

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

但是,我建议您将两个城市名称放在分开列中。然后在检索数据时构造字符串。

答案 2 :(得分:0)

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

测试here

答案 3 :(得分:0)

这是产生such a query的另一种方法:

con.database: 'cart';

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