查询......
select distinct name from myTable
Run Code Online (Sandbox Code Playgroud)
返回一组以下列字符序列开头的值...
ADL*
FG*
FH*
LAS*
TWUP*
Run Code Online (Sandbox Code Playgroud)
其中'*'是字符串的剩余部分.
我希望通过以下方式进行排序......
ADL*
LAS*
TWUP*
FG*
FH*
Run Code Online (Sandbox Code Playgroud)
但是,我还希望通过时尚按照标准顺序在每个名称中进行排序.所以,举个例子,如果我有以下值
LAS-21A
TWUP-1
FG999
FH3
ADL99999
ADL88888
ADL77777
LAS2
Run Code Online (Sandbox Code Playgroud)
我希望它像这样排序......
ADL77777
ADL88888
ADL99999
LAS2
TWUP-1
FG999
FH3
Run Code Online (Sandbox Code Playgroud)
我最初认为我可以完成这个过滤通过解码(blah)执行一个命令,在解码中有一些类似的技巧,但我一直无法完成它.任何见解?
高飞和冗长,但应该工作:
select name, case when substr (name, 1, 3) = 'ADL' then 1
when substr (name, 1, 3) = 'LAS' then 2
when substr (name, 1, 4) = 'TWUP' then 3
when substr (name, 1, 2) = 'FG' then 4
when substr (name, 1, 2) = 'FH' then 5
else 6
end SortOrder
from myTable
order by 2, 1;
Run Code Online (Sandbox Code Playgroud)
不确定6是否是对其他项目进行排序的正确位置,但很明显如何解决这个问题.至少很明显发生了什么,即使我不知道你为什么这样做.
编辑:如果这些是唯一的值,您可以更改第4行和第5行:
select name, case when substr (name, 1, 3) = 'ADL' then 1
when substr (name, 1, 3) = 'LAS' then 2
when substr (name, 1, 4) = 'TWUP' then 3
when substr (name, 1, 1) = 'F' then 4
else 6
end SortOrder
from myTable
order by 2, 1;
Run Code Online (Sandbox Code Playgroud)
另一个编辑:再次,如果这些是唯一的值,你可以进一步简化.由于唯一的一个故障是F*系列,你可以强制它们到最后,并使用实际的第一个字母为所有其他.这更简单,但过分依赖于我偏好的确切值.另一方面,它确实删除了许多看似不必要的调用substr:
select name, case when substr (name, 1, 1) = 'F' then 'Z'
else name
end SortOrder
from myTable
order by 2, 1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4606 次 |
| 最近记录: |