Maison > base de données > tutoriel mysql > Comment puis-je effectuer un tri naturel de chaînes alphabétiques et numériques mixtes dans PostgreSQL ?

Comment puis-je effectuer un tri naturel de chaînes alphabétiques et numériques mixtes dans PostgreSQL ?

Linda Hamilton
Libérer: 2025-01-08 00:52:40
original
191 Les gens l'ont consulté

How Can I Perform Natural Sorting of Mixed Alphabetic and Numeric Strings in PostgreSQL?

Tri naturel des chaînes alphanumériques mixtes PostgreSQL

Un défi inhérent au tri naturel de chaînes alphanumériques mixtes est de maintenir l'ordre des mots tout en traitant les nombres comme des nombres entiers. Dans PostgreSQL 9.1 et supérieur, une méthode pratique existe :

Types composites et opérations sur les tableaux :

  1. Créez un type composite appelé "ai" qui contient un champ de texte "a" et un champ entier "i".
  2. Divisez chaque chaîne en un tableau de valeurs "ai" à l'aide de la fonction "regexp_matches".

Exemple de requête (PostgreSQL 9.4 et versions ultérieures) :

<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>
Copier après la connexion

Comment gérer PostgreSQL 9.1 :

Dans les anciennes versions de PostgreSQL, la requête doit être légèrement modifiée :

<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>
Copier après la connexion

Avec cette approche, le fractionnement de chaînes et le tri naturel deviennent réalisables dans PostgreSQL, permettant un tri intuitif de divers ensembles de données contenant des chaînes alphanumériques mixtes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal