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
Freigeben: 2025-01-09 12:03:56
Original
668 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

In unserem Beispiel verbessern Klammern die Lesbarkeit:

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

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage