PGSQL 查询以在每个用户名中使用特定字母进行排序

PGSQL Query to Order by with a specific letter in every user name

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

即"L" 字母应优先排序

可以使用position函数提取l的位置,并据此排序。但是,有两个注意事项需要牢记:

  1. position 区分大小写,因此您必须明确处理大小写(例如,通过小写字符串进行搜索)。
  2. 如果您要搜索的子字符串(l,在本例中)不在字符串中,position 将 return 0,因此您'必须显式处理 0 以免没有 Ls 的名称排在第一位而不是最后一位:


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