gpt4 book ai didi

mysql - SQL Order By 但反转一个元素

转载 作者:行者123 更新时间:2023-11-29 01:03:02 33 4
gpt4 key购买 nike

我有一个 SQL 查询结果如下

Code  int1 int2 int3   S
C12 21 22 14 1
C33 43 56 2 3
C34 23 2 1 3
C55 33 92 12 5
CB56 45 66 10 5
MA10 10 11 12 1

这是在Code上使用OrderBy的结果但是我不希望它按字母排序但是根据它后面的数字,对于 M1 中的 ex 1 和 C33 中的 33在某些情况下,字母后面的数字可能是 3 位数字,例如 E344我希望它看起来像什么

Code  int1 int2 int3    S
MA10 10 11 12 1
C12 21 22 14 1
C323 43 56 2 3
C325 43 56 2 3
C34 23 2 1 3
C525 33 92 12 5
CB56 45 66 10 5

我需要的是

M 如果存在则应始终显示在顶部然后根据第一位的数字排序然后按照第二位的数字排序然后按照第三位的数字排序

字段“s”将始终由代码中的第一个数字组成

最佳答案

第 1 步将列拆分为 2 列,1 列包含字母,另一列包含数字:

SELECT 
substring(code,0,PATINDEX('%[0-9]%', Code)) as letters,
substring(code,PATINDEX('%[0-9]%', Code)) as numbers,
fields
FROM table

第 2 步将数字转换为整数并排序

CONVERT(substring(code,PATINDEX('%[0-9]%', Code)),UNSIGNED INTEGER) as numbers

第三步排序

Order by field1 asc, field2 desc... etc

使用子查询可能更容易:

select * from
(SELECT
substring(code,0,PATINDEX('%[0-9]%', Code)) as letters,
CONVERT(substring(code,PATINDEX('%[0-9]%', Code)),UNSIGNED INTEGER) as numbers,
fields
FROM table) T
order by numbers asc, letters desc

关于mysql - SQL Order By 但反转一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27638177/

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