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!