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
的位置,并据此排序。但是,有两个注意事项需要牢记:
position
区分大小写,因此您必须明确处理大小写(例如,通过小写字符串进行搜索)。
- 如果您要搜索的子字符串(
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
我必须编写一个查询,以某种方式对我的用户名进行排序(排序),其中应优先使用特定字母(在名称中)进行排序。 例如,如果我有用户 Lemon、Loger、Alan、Avon、Bland、Cavin、Clauge,那么我的查询应该 return 这些按以下顺序排列:
- 柠檬
- 记录器
- 艾伦
- 乏味
- 条款
- 雅芳
- 凯文
即"L" 字母应优先排序
可以使用position
函数提取l
的位置,并据此排序。但是,有两个注意事项需要牢记:
position
区分大小写,因此您必须明确处理大小写(例如,通过小写字符串进行搜索)。- 如果您要搜索的子字符串(
l
,在本例中)不在字符串中,position
将 return0
,因此您'必须显式处理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