PGSQL查询到订单,每个用户名中都有一个特定的字母

时间:2017-11-18 07:55:58

标签: sql postgresql select sql-order-by

我必须编写一个查询,以一种方式排序(排序)我的用户名,它应该按优先级(在名称中)的特定字母进行排序。 例如,如果我有用户Lemon,Loger,Alan,Avon,Bland,Cavin,Clauge,那么我的查询应按以下顺序返回:

  • 柠檬
  • Loger
  • 艾伦
  • Bland
  • Clauge
  • 雅芳
  • 卡万

即。 “L”字母应该优先排序

1 个答案:

答案 0 :(得分:1)

您可以使用position功能提取l的位置,并根据该位置进行排序。但是,要记住两点需要注意:

  1. position区分大小写,因此您必须明确处理案例(例如,通过小写字符串进行搜索)。
  2. 如果您要搜索的子字符串(在这种情况下为l)不在字符串中,position将返回0,那么您&#39 ; ll必须明确地处理0没有Ls的名字,而不是最后一个:

  3. SELECT   name
    FROM     mytable
    ORDER BY CASE POSITION('l' IN LOWER(name))
                  WHEN 0 THEN NULL
                  ELSE POSITION('l' IN LOWER(name)) 
             END ASC NULLS LAST,
             name