按字母数字DB2语法排序的WinSQL

按字母数字DB2语法排序的WinSQL,db2,db2-400,winsql,Db2,Db2 400,Winsql,我有以下一组数据: 33 5A 5B 12 34A 2 34B 2B 11 10 12A 在WinSQL中运行以下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

我有以下一组数据:

33
5A
5B
12
34A
2
34B
2B
11
10
12A
在WinSQL中运行以下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 server函数(如PATINDEX、SIGNED/UNSIGNED)都不可用

试试这个:

ORDER BY CAST(replace(replace(replace(f,'A',''),'B',''),' ','') AS INT), f

(也就是说,通过去掉非数字元素来构造一个排序字段&转换为数字,然后使用原始值进行绑定)。

Db2服务器是在Z/OS、i-Series还是Linux/Unix/Windows上运行的?排序顺序决定排序顺序。是否所有值都遵循以下模式:
[0-9]{1,2}[A-Z]?
?DB2服务器正在iSeries上运行@是的@穆斯塔乔