Heim >Datenbank >MySQL-Tutorial >Wie normalisiere ich PostgreSQL-Array-Indizes so, dass sie bei 1 beginnen?

Wie normalisiere ich PostgreSQL-Array-Indizes so, dass sie bei 1 beginnen?

Linda Hamilton
Linda HamiltonOriginal
2025-01-09 12:03:56717Durchsuche

How to Renormalize PostgreSQL Array Subscripts to Start from 1?

PostgreSQL-Array-Indizes so anpassen, dass sie bei 1 beginnen

Die Flexibilität von PostgreSQL ermöglicht Arrays mit Indizes, die nicht bei der Standard-1 beginnen. Beispielsweise werden die Elemente des folgenden Arrays von 5 bis 7 indiziert:

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

Der Zugriff auf das erste Element erfordert die Verwendung von Index 5:

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

Viele Benutzer bevorzugen jedoch Arrays mit Indizes, die bei 1 beginnen. So erreichen Sie dies:

<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>

Dadurch wird das Array-Slice vom niedrigsten zum höchsten Index extrahiert, wodurch die Indizierung effektiv zurückgesetzt wird.

Ein besser lesbarer Ansatz mit einem Common Table Expression (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>

Für PostgreSQL 9.6 und höher gibt es eine vereinfachte Methode: Weglassen der Unter- und Obergrenzen in der Slice-Spezifikation:

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

In unserem Beispiel verbessern Klammern die Lesbarkeit:

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

Dieser Ansatz ist effizient und funktioniert auch in Postgres-Versionen vor 9.6 gut.

Das obige ist der detaillierte Inhalt vonWie normalisiere ich PostgreSQL-Array-Indizes so, dass sie bei 1 beginnen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn