WinSQL ORDER BY字母数字DB2语法

时间:2018-08-03 13:45:29

标签: 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
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)都不可用。

1 个答案:

答案 0 :(得分:1)

尝试一下:

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

(即,通过除去非数字元素并转换为数字,然后使用原始值进行平局决胜来构造排序字段)。