在SQL中使用[a-9]而不是[0-Z]对ORDER进行ORDER

前端之家收集整理的这篇文章主要介绍了在SQL中使用[a-9]而不是[0-Z]对ORDER进行ORDER前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
默认情况下,sql在字符前排序数字.

所以,如果我有“名称”列:

  1. abc
  2. ab1
  3. a1b
  4. 1ba
  5. 1bac
  6. b21

由于sql按0-Z(先0到9,然后是a-Z)排序,因此查询

  1. SELECT * FROM ... ORDER BY name

将导致:

  1. 1ba
  2. 1bac
  3. a1b
  4. ab1
  5. abc
  6. abc1
  7. b21

但我希望它按a-0排序(先是a-Z,然后是0-9).

  1. abc
  2. abc1
  3. ab1
  4. a1b
  5. b21
  6. 1ba
  7. 1bac

如何在查询中执行此操作?更具体地说,我如何在sqlite中执行此操作?

我在Sort MySQL results alphabetically,but with numbers last中找到了一个解决方案,但仅限于第一个char.

解决方法

我建议选择另一个列,比如name_replace,将数字替换为高位ASCII字符(例如〜),然后在该列上排序,然后在名称上排序.不幸的是,sqlite不支持 regular expression替换:
  1. SELECT name,replace( ... replace(replace(name,'0','~'),'1','~') ... '9','~') AS name_replace
  2. FROM mytable
  3. ORDER BY name_replace,name

在name_replace上排序时,数字将是最后的.然后按名称排序将按数字排序.

猜你在找的MsSQL相关文章