默认情况下,SQL在字符之前对数字进行排序。
因此,如果我有“名称”列:
abc
ab1
a1b
1ba
1bac
b21
由于SQL按0-Z排序(前0到9,然后是a-Z),因此查询
SELECT * FROM ... ORDER BY name
将导致:
1ba
1bac
a1b
ab1
abc
abc1
b21
但是我希望它按a-0排序(首先是a-Z,然后是0-9)。
abc
abc1
ab1
a1b
b21
1ba
1bac
如何在查询中执行此操作?更具体地说,如何在SQLite中做到这一点?
我在Sort MySQL results alphabetically, but with numbers last中找到了一个解决方案,但仅适用于第一个字符。
最佳答案
我建议SELECT
在另一列上说name_replace
,用高ASCII字符(例如~
)替换数字,然后在该列上排序,然后在名称上排序。不幸的是,SQLite不支持regular expression replace:
SELECT name, replace( ... replace(replace(name, '0', '~'), '1', '~') ... '9', '~') AS name_replace
FROM mytable
ORDER BY name_replace, name
在按
name_replace
排序时,数字将排在最后。然后,按name
排序将按数字排序。关于sql - 在SQL中使用[a-9]而不是[0-Z]的ORCHAR BY varchar,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9873084/