首頁 > 資料庫 > mysql教程 > 如何在 PostgreSQL 中對字母數字字串進行人性化排序?

如何在 PostgreSQL 中對字母數字字串進行人性化排序?

Patricia Arquette
發布: 2025-01-07 22:06:46
原創
208 人瀏覽過

How Can I Sort Alphanumeric Strings Humanely in PostgreSQL?

PostgreSQL 中的人性化字串排序

在 PostgreSQL 中,對包含字母和數字混合的字串進行人性化排序可能具有挑戰性,但可以使用 regexp_matches() 和陣列聚合的組合來實現。

分割字串

第一步是將每個字串分割成其組成的字母和數字部分。這可以使用 regexp_matches() 函數和類似 (D*)(d*) 的正規表示式來完成。然後可以迭代生成的匹配數組,以創建成對的數組,每一對都包含一個文字值和一個整數值。

排序這些對

下一步是根據所需的人性化順序對這些值對進行排序。文字值可以按照正常的字串排序順序排序,而整數值可以作為整數排序。

重新組合字串

最後,可以使用排序後的配對以所需的個人化順序重新組合原始字串。

PostgreSQL 9.4 或更高版本

在 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 9.1 中,可以使用以下查詢:

<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         -- 用于处理尾随 0 的特殊情况</code>
登入後複製

以上是如何在 PostgreSQL 中對字母數字字串進行人性化排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板