通过MySQL函数反转字符串中的单词

时间:2018-01-07 19:37:05

标签: mysql sql wordpress

我通过WordPress与MySQL合作,我想根据其相反的顺序对标题进行排序。例如:

Samuel Leroy Jackson -> Jackson Leroy Samuel
Samuel L Jackson     -> Jackson L Samuel
Samuel Jackson       -> Jackson Samuel
Samuel L Jackson Jr  -> Jr Jackson L Samuel

我想通过MySQL这样做,以便我可以根据结果进行排序。

2 个答案:

答案 0 :(得分:1)

以下示例将反转3个字的字符串。您可以采用此示例并为2和4个字符串编写类似的反转器(如果您的数据限制为2-4个字)。 然后,您可以运行3个不同的查询,每个查询数量一个(或者可以将它们全部与工会结合使用)来处理所有数量的单词。

举个例子,运行此命令将输入​​ Jackson Leroy Samuel 转换为输出 Samuel Leroy Jackson

SELECT 
    CONCAT(SUBSTRING_INDEX('Jackson Leroy Samuel', ' ', - 1),
            ' ',
            SUBSTR('Jackson Leroy Samuel',
                INSTR('Jackson Leroy Samuel', ' ') + 1,
                INSTR('Jackson Leroy Samuel', ' ')),
            LEFT('Jackson Leroy Samuel',
                LOCATE(' ', 'Jackson Leroy Samuel') - 1));

答案 1 :(得分:0)

在文本处理中,SQL数据库不是效率低,但由于SQL倾向于将列视为原子值,因此处理子字符串和值的其他部分的操作不是#39;非常方便

例如,在MySQL中,尝试将字符串拆分为数组有点尴尬。实际上没有数组数据类型。

最接近的是SUBSTRING_INDEX()。您可以根据字符分隔符获取子字符串。在这种情况下,请使用空格作为分隔符。

mysql> SET @name = 'Samuel Leroy Jackson';
mysql> SELECT SUBSTRING_INDEX(@name, ' ', -1) AS `last name`,
    ->        SUBSTRING_INDEX(@name, ' ', 1) AS `first name`,
    ->        SUBSTRING_INDEX(SUBSTRING_INDEX(@name, ' ', 2), ' ', -1) AS `middle name`;
+-----------+------------+-------------+
| last name | first name | middle name |
+-----------+------------+-------------+
| Jackson   | Samuel     | Leroy       |
+-----------+------------+-------------+

当你有可选的" Jr。"时,你必须弄清楚如何处理案件。或其他超过三个字的名字。我建议您阅读我链接到SUBSTRING_INDEX()的文档,并花时间阅读同一页面上的其他字符串函数。