2017-11-18 303 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。提供的查詢適用於我。 :) –

相關問題