WinSQL ORDER BY 字母数字 DB2 语法
WinSQL ORDER BY alphanumeric DB2 syntax
我有如下一组数据:
33
5A
5B
12
34A
2
34B
2B
11
10
12A
当我在 Win运行 中 SQL 以下 SQL:
with input (f) as (
values ('33'), ('5A'), ('5B'),('12'), ('34A'),('2'), ('34B'), ('2B'), ('11'), ('10'), ('12A')
)
SELECT f
FROM input
ORDER BY f
我得到以下结果:
10
11
12
12A
2
2B
33
34A
34B
5A
5B
但是我希望结果按以下顺序排列:
2
2B
5A
5B
10
11
12
12A
33
34A
34B
我试过以下方法:
with input (f) as (
values ('33'), ('5A'), ('5B'),('12'), ('34A'),('2'), ('34B'), ('2B'), ('11'), ('10'), ('12A')
)
SELECT
f
FROM input
ORDER BY CAST(CASE
WHEN f LIKE '[0-9]' THEN LEFT(CONCAT(0,f),1)
WHEN f LIKE '[0-9]%' THEN LEFT(CONCAT(0,f),1)
WHEN f LIKE '[0-9][0-9]%' THEN LEFT(f ,2)
ELSE NULL
END AS INT), f
但是不行。
注意:这是针对 DB2 的,所有 SQL 服务器功能(例如 PATINDEX、SIGNED/UNSIGNED)都不可用。
试试这个:
ORDER BY CAST(replace(replace(replace(f,'A',''),'B',''),' ','') AS INT), f
(即通过去除非数字元素并转换为数字元素来构建排序字段,然后使用原始值进行平局)。
我有如下一组数据:
33
5A
5B
12
34A
2
34B
2B
11
10
12A
当我在 Win运行 中 SQL 以下 SQL:
with input (f) as (
values ('33'), ('5A'), ('5B'),('12'), ('34A'),('2'), ('34B'), ('2B'), ('11'), ('10'), ('12A')
)
SELECT f
FROM input
ORDER BY f
我得到以下结果:
10
11
12
12A
2
2B
33
34A
34B
5A
5B
但是我希望结果按以下顺序排列:
2
2B
5A
5B
10
11
12
12A
33
34A
34B
我试过以下方法:
with input (f) as (
values ('33'), ('5A'), ('5B'),('12'), ('34A'),('2'), ('34B'), ('2B'), ('11'), ('10'), ('12A')
)
SELECT
f
FROM input
ORDER BY CAST(CASE
WHEN f LIKE '[0-9]' THEN LEFT(CONCAT(0,f),1)
WHEN f LIKE '[0-9]%' THEN LEFT(CONCAT(0,f),1)
WHEN f LIKE '[0-9][0-9]%' THEN LEFT(f ,2)
ELSE NULL
END AS INT), f
但是不行。
注意:这是针对 DB2 的,所有 SQL 服务器功能(例如 PATINDEX、SIGNED/UNSIGNED)都不可用。
试试这个:
ORDER BY CAST(replace(replace(replace(f,'A',''),'B',''),' ','') AS INT), f
(即通过去除非数字元素并转换为数字元素来构建排序字段,然后使用原始值进行平局)。