默认情况下,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/

10-10 07:53