首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何先用字母对字符串列进行排序?

如何先用字母对字符串列进行排序?
EN

Stack Overflow用户
提问于 2019-10-19 18:08:10
回答 1查看 58关注 0票数 1

比如说,我想按名字对记录进行排序,名字也可以从数字字母开始。

如果我这么做

代码语言:javascript
复制
Something.query.order_by(Something.name)

我有以下命令:

  • Zesty

  • 排行
  • 33
  • Beta版

如何将查询更改为将数字放在字母之后:

version

  • Zesty

  • 1st
  • Beta
  • 33
EN

回答 1

Stack Overflow用户

发布于 2019-10-19 19:47:11

添加一个初始排序子句来将前导-数字与前导-非数字分隔起来似乎是有效的:

代码语言:javascript
复制
engine = sa.create_engine(connection_url)
metadata = sa.MetaData()

mytable = sa.Table('mytable', metadata, autoload=True, autoload_with=engine)

# 1. default sort
stmt = sa.sql.select([mytable.c.thing])\
    .select_from(mytable)\
    .order_by(mytable.c.thing)
with engine.begin() as conn:
    print(conn.execute(stmt).fetchall())
    # [('1st in a row',), ('99 beers',), ('Beta version',), ('Zesty',)]

# 2. non-numeric first
sort_boundary = '9' * mytable.c.thing.type.length
print(sort_boundary)
# 99999999999999999999999999999999999999999999999999
#
stmt = sa.sql.select([mytable.c.thing])\
    .select_from(mytable)\
    .order_by(mytable.c.thing <= sort_boundary, mytable.c.thing)
with engine.begin() as conn:
    print(conn.execute(stmt).fetchall())
    # [('Beta version',), ('Zesty',), ('1st in a row',), ('99 beers',)]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58466629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档