Nic*_*Nic 8 sql sqlite sql-order-by
默认情况下,SQL在字符前排序数字.
所以,如果我有"名称"列:
abc
ab1
a1b
1ba
1bac
b21
Run Code Online (Sandbox Code Playgroud)
由于SQL按0-Z(前0到9,然后是aZ)排序,因此查询
SELECT * FROM ... ORDER BY name
Run Code Online (Sandbox Code Playgroud)
将导致:
1ba
1bac
a1b
ab1
abc
abc1
b21
Run Code Online (Sandbox Code Playgroud)
但我希望它按a-0排序(先是aZ,然后是0-9).
abc
abc1
ab1
a1b
b21
1ba
1bac
Run Code Online (Sandbox Code Playgroud)
我如何在查询中执行此操作?更具体地说,我如何在SQLite中执行此操作?
我在按字母顺序排序MySQL结果中找到了一个解决方案,但数字最后,但仅限于第一个字符.
这是我的想法:添加另一个“help_column”来检查第一个字符是否是数字并为其分配 1,否则分配 0,然后按此列排序,然后按名称排序:
select *, case
when substring(name,1,1) like '[0-9]' then 1
else 0
end as help_order
from (
select 'ab1' as name union select 'a1b' as name union select '1ba' as name union select 'b21' as name
) a
order by help_order, name
Run Code Online (Sandbox Code Playgroud)
当然,如果有必要,您可能需要改进正则表达式 [0-9] 以处理多个数字。
当然,您应该替换内部查询(与您的表具有多个联合的查询)。