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 ?
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 :
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>
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>
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!