我通过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这样做,以便我可以根据结果进行排序。
答案 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()的文档,并花时间阅读同一页面上的其他字符串函数。