我在排序之后的 ASC 中的列名(设备_no)之后有一个列如下的值,并且想知道如何正确排序,如下一个列表所示。
SELECT equipment_no FROM fas_details WHERE equipment_no LIKE 'T%' ORDER BY equipment_no
请告诉我你的建议。谢谢。
mysql如何排序
T - AG - 01
T - AG - 02
T - AG - 07
T - AG - 08
T - AG - 09
T - AG - 10
T - AG - 100
T - AG - 101
T - AG - 102
T - AG - 103
T - AG - 104
T - AG - 11
T - AG - 12
T - AG - 13
T - AG - 103
T - AG - 104
TG - 10
TG - 100
TG - 99
我希望如何
T - AG - 01
T - AG - 02
T - AG - 07
T - AG - 08
T - AG - 09
T - AG - 10
T - AG - 11
T - AG - 12
T - AG - 13
T - AG - 100
T - AG - 101
T - AG - 102
T - AG - 103
T - AG - 104
TG - 10
TG - 99
TG - 100
答案 0 :(得分:2)
看起来您希望将最后的数字视为数字。诀窍在于处理名称中不同数量的连字符。如果只有一个连字符,你可以这样做:
order by substring_index(equipment_no, '-', 1),
substring_index(equipment_no, '-', -1) + 0
在您的情况下,这可能有效:
order by (case when equipment_no not like '%-%-%'
then substring_index(equipment_no, '-', 1)
else substring_index(equipment_no, '-', 2)
end),
substring_index(equipment_no, '-', -1) + 0
这将处理1或2个连字符大小写,如您的示例所示。
答案 1 :(得分:1)
你可以尝试:
SELECT
equipment_no
FROM fas_details
WHERE equipment_no LIKE 'T%'
ORDER BY SUBSTRING_INDEX(equipment_no,SUBSTRING_INDEX(equipment_no ,'-',-1)+0,1),
SUBSTRING_INDEX(equipment_no ,'-',-1)+0;
Demonstration: 您可以在此处查看演示文稿,了解四种不同的输入
SET @str := 'T - AG - 100';
SELECT SUBSTRING_INDEX(@str,'-',-1)+0 AS numberPart,
SUBSTRING_INDEX(@str,SUBSTRING_INDEX(@str,'-',-1)+0,1) AS textPart
输出(双连字符):
numberPart textPart
100 T - AG -
输出(单个连字符):
if equipment_no = 'TG - 100'
numberPart textPart
100 TG -
注意:无论equipment_no
列中的连字符数量如何,它都能正常工作。
答案 2 :(得分:0)
您需要使用字符串函数提取要排序的部分。以下示例将执行此操作。
order by trim(SUBSTRING_INDEX(equipment_no, '-', -1))