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;
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
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
4条答案
按热度按时间798qvoo81#
我们可以用
SUBSTRING_INDEX
按字典顺序比较两个城市的名字,然后交换位置,如果第二个名字属于第一个。演示
nfzehxib2#
好吧,如果你只有两个部分,你可以重建字符串:
不过,我建议你把这两个城市的名字放在不同的栏里。然后在检索数据时构造字符串。
sd2nnvve3#
三个字?比较第一个单词和最后一个单词,如果顺序不对,就用不同的方法缝合。
例子:
在此处测试
34gzjxbg4#
这是产生这种查询的另一种方法:
由三个单词组成的字符串。