Maison >base de données >tutoriel mysql >Comment renormaliser les indices de tableau PostgreSQL pour qu'ils commencent à partir de 1 ?

Comment renormaliser les indices de tableau PostgreSQL pour qu'ils commencent à partir de 1 ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-09 12:03:56752parcourir

How to Renormalize PostgreSQL Array Subscripts to Start from 1?

Ajustement des indices de tableau PostgreSQL pour commencer à partir de 1

La flexibilité de PostgreSQL permet d'utiliser des tableaux avec des indices qui ne commencent pas par le 1 standard. Par exemple, les éléments du tableau suivant sont indexés de 5 à 7 :

<code class="language-sql">SELECT '[5:7]={1,2,3}'::int[];</code>

L'accès au premier élément nécessite l'utilisation de l'index 5 :

<code class="language-sql">SELECT ('[5:7]={1,2,3}'::int[])[5];</code>

Cependant, de nombreux utilisateurs préfèrent les tableaux avec des indices commençant à 1. Voici comment y parvenir :

<code class="language-sql">SELECT ('[5:7]={1,2,3}'::int[])[array_lower('[5:7]={1,2,3}'::int[], 1):array_upper('[5:7]={1,2,3}'::int[], 1)];</code>

Cela extrait la tranche du tableau de l'index le plus bas au plus élevé, réinitialisant ainsi l'indexation.

Une approche plus lisible utilisant une expression de table commune (CTE) :

<code class="language-sql">WITH cte(a) AS (SELECT '[5:7]={1,2,3}'::int[])
SELECT a[array_lower(a, 1):array_upper(a, 1)]
FROM cte;</code>

Pour PostgreSQL 9.6 et versions ultérieures, une méthode simplifiée existe : omettre les limites inférieure et supérieure dans la spécification de la tranche :

<code class="language-sql">SELECT my_arr[:];</code>

Pour notre exemple, les parenthèses améliorent la lisibilité :

<code class="language-sql">SELECT ( '[5:7]={1,2,3}'::int[] )[:];</code>

Cette approche est efficace et fonctionne bien même dans les versions de Postgres antérieures à 9.6.

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!

Déclaration:
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