我需要使用以下规则订购一些值:
- 在 D 之前以 DK 开头的值
- 按字母顺序在这两组中排序
所以这些值看起来像:
- DK207
- D107
- DK107
- D099
他们希望最终得到:
- DK107
- DK207
- D099
- D107
我目前的尝试:
select *
from customers
order by case
WHEN substring(code,1,2) = 'DK' then substring(code,1,2)
WHEN substring(code,1,1) = 'D' then substring(code,1)
END desc,
case
WHEN substring(code,1,2) = 'DK' then substring(code,3)
WHEN substring(code,1,1) = 'D' then substring(code,2)
END asc;
对于 DK 值,这似乎工作正常,但对于以 D 开头的值则混乱。它们被正确分组,但带有 D 的值似乎是按降序排序的。