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
Libérer: 2025-01-09 12:03:56
original
717 Les gens l'ont consulté

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

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

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

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

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

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

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

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!

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