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