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中文網其他相關文章!