gpt4 book ai didi

sql - 在MySQL中对字符串字符进行排序

转载 作者:可可西里 更新时间:2023-11-01 06:37:16 27 4
gpt4 key购买 nike

我在 mysql 表中有一列 (varchar(255)),我们称它为“word”。如何编写一个选择查询,返回此列中按字符串中的字符排序的值?

例如,如果其中一条记录有单词“earth”,它应该为所有行返回“aehrt”等等。有什么方法可以在单个查询中完成吗?

最佳答案

可能非常低效,但不需要任何用户定义的函数:

SELECT GROUP_CONCAT(LETTER SEPARATOR '') AS ReOrderedLetters
FROM ( SELECT 'A' as LETTER FROM <table> WHERE UPPER(`name`) like '%A%'
UNION ALL
SELECT 'B' as LETTER FROM <table> WHERE UPPER(`name`) like '%B%'
UNION ALL
SELECT 'C' as LETTER FROM <table> WHERE UPPER(`name`) like '%C%'
UNION ALL
SELECT 'D' as LETTER FROM <table> WHERE UPPER(`name`) like '%D%'
...
UNION ALL
SELECT 'Y' as LETTER FROM <table> WHERE UPPER(`name`) like '%Y%'
UNION ALL
SELECT 'Z' as LETTER FROM <table> WHERE UPPER(`name`) like '%Z%'
) alpha

编辑

我必须在 sleep 前想出一个更好的选择,否则我永远也睡不着;所以这里有一个更清洁、更高效的替代方案。

我创建了一个名为 letters 的表,其中包含一个名为 letter 的 VARCHAR(1) 列;然后用字母 A 到 Z 填充该表

CREATE TABLE IF NOT EXISTS `letters` (
`letter` varchar(1) NOT NULL,
PRIMARY KEY (`letter`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `letters` (`letter`) VALUES
('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('J'),('K'),('L'),('M'),
('N'),('O'),('P'),('Q'),('R'),('S'),('T'),('U'),('V'),('W'),('X'),('Y'),('Z');

然后:

select U.`name`,
GROUP_CONCAT(L.`letter`
ORDER BY L.`letter` ASC
SEPARATOR '') AS ReOrderedLetters
FROM `users` U
LEFT JOIN `letters` L ON POSITION(L.`letter` IN UPPER(U.`name`)) > 0
GROUP BY U.`name`

关于sql - 在MySQL中对字符串字符进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3427208/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com