我有一个包含此类字符串“ Sapa to Hanoi”的SQL表。
我想将其更改为“河内到萨帕”,因为在对字母顺序进行排序时,“河内”应该排在第一位。
如何在SQL中完成?
答案 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;
答案 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)