शायद अत्यधिक अक्षम, लेकिन उपयोगकर्ता-परिभाषित कार्यों की आवश्यकता के बिना:
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
संपादित करें
मुझे बिस्तर पर जाने से पहले एक बेहतर विकल्प के साथ आना पड़ा, नहीं तो मुझे कभी नींद नहीं आती; तो यहाँ एक अधिक स्वच्छ और अधिक कुशल विकल्प है।
मैंने अक्षर नामक एक तालिका बनाई जिसमें 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`