2017-11-18 308 views
1

我必须编写一个查询来排序(按顺序排列)我的用户名,使用特定字母进行排序的方式优先(名称内)。 例如,如果我有用户柠檬,Loger,艾伦,雅芳,布兰德,卡万,Clauge那么我的查询应按照以下顺序返回这些:PGSQL通过每个用户名中的特定字母来查询排序

  • 柠檬
  • Loger
  • 艾伦
  • 布兰德
  • Clauge
  • 雅芳
  • 卡万

即“L”的信应该在分拣

回答

1

可以使用position函数来提取的l的位置,并且排序根据该优先级是。有,但是,两个警告要牢记:

  1. position是大小写敏感的,所以你必须与案件明确地处理(例如,通过lowercasing字符串进行搜索)。
  2. 如果你要搜索的字符串(l,在这种情况下)是不是在字符串中,position将返回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 
+1

确定这是一个很酷的解决方案:o –

+0

感谢@mureinik。提供的查询适用于我。 :) –

相关问题