PostgreSQL中如何按字符串后缀排序(R优先于S)
PostgreSQL按ref_num最后一个字符排序(R在前,S在后)
这里提供几种可行的实现方式:
方法1:使用RIGHT函数(最简洁)
直接截取字段的最后1个字符,以此作为排序依据。由于'R'的ASCII码小于'S',默认升序排序就能满足R在前、S在后的需求:
SELECT ref_num FROM your_table_name ORDER BY RIGHT(ref_num, 1);
注:ASC是默认排序规则,可省略不写。
方法2:修正SUBSTRING的用法
如果之前用substring未成功,可能是语法问题。PostgreSQL中可以通过以下两种方式用substring截取最后一个字符:
方式A:基于字符串长度
SELECT ref_num FROM your_table_name ORDER BY substring(ref_num, length(ref_num));
方式B:正则匹配
SELECT ref_num FROM your_table_name ORDER BY substring(ref_num from '.$');
方法3:用CASE语句明确排序优先级(更稳妥)
如果后续可能出现其他后缀字符,或者不想依赖ASCII码顺序,可以用CASE强制指定排序优先级:
SELECT ref_num FROM your_table_name ORDER BY CASE RIGHT(ref_num, 1) WHEN 'R' THEN 1 WHEN 'S' THEN 2 ELSE 3 -- 其他后缀排在最后 END;
内容的提问来源于stack exchange,提问作者Syntesa
相关产品推荐
相关产品推荐

