PostgreSQL混合字母数字字符串的自然排序
对混合字母数字字符串进行自然排序的固有挑战在于:既要保持单词的顺序,又要将数字视为整数处理。在PostgreSQL 9.1及更高版本中,存在一种实用的方法:
复合类型和数组操作:
示例查询(PostgreSQL 9.4及更高版本):
<code class="language-sql">SELECT data FROM alnum ORDER BY ARRAY(SELECT ROW(x[1], CASE x[2] WHEN '' THEN '0' ELSE x[2] END)::ai FROM regexp_matches(data, '(\D*)(\d*)', 'g') x) , data;</code>
PostgreSQL 9.1的处理方法:
在较早版本的PostgreSQL中,需要稍微修改一下查询:
<code class="language-sql">SELECT data FROM ( SELECT ctid, data, regexp_matches(data, '(\D*)(\d*)', 'g') AS x FROM alnum ) x GROUP BY ctid, data -- ctid作为缺少主键的占位符 ORDER BY regexp_replace (left(data, 1), '[0-9]', '0') , array_agg(ROW(x[1], CASE x[2] WHEN '' THEN '0' ELSE x[2] END)::ai) , data;</code>
通过这种方法,字符串分割和自然排序在PostgreSQL中成为可行的方法,从而可以对包含混合字母数字字符串的各种数据集进行直观的排序。
以上是如何在 PostgreSQL 中对混合字母和数字字符串进行自然排序?的详细内容。更多信息请关注PHP中文网其他相关文章!