Heim >Datenbank >MySQL-Tutorial >Wie teile ich eine Textspalte in PostgreSQL in mehrere Zeilen auf?

Wie teile ich eine Textspalte in PostgreSQL in mehrere Zeilen auf?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-06 21:37:40616Durchsuche

How to Split a Text Column into Multiple Rows in PostgreSQL?

Spalten in Zeilen in Postgres aufteilen

In Postgres kann es erforderlich sein, eine Tabelle mit einer einzelnen Spalte vom Typ Text in eine Tabelle mit mehreren Zeilen umzuwandeln Jede Zeile stellt ein Token aus der Textspalte dar.

Beispieldaten und gewünschte Ausgabe

Berücksichtigen die folgende Quelltabelle:

</p>
<table>
<thead><tr>
<th>subject</th>
<th>flag</th>
</tr></thead>
<tbody><tr>
<td>this is a test</td>
<td>2</td>
</tr></tbody>
</table>
<p>

Die gewünschte Ausgabe ist eine Tabelle mit zwei Spalten:

</p>
<table>
<thead><tr>
<th>token</th>
<th>flag</th>
</tr></thead>
<tbody>
<tr>
<td>this</td>
<td>2</td>
</tr>
<tr>
<td>is</td>
<td>2</td>
</tr>
<tr>
<td>a</td>
<td>2</td>
</tr>
<tr>
<td>test</td>
<td>2</td>
</tr>
</tbody>
</table>
<p>

Lösung mit LATERAL Join

Für Postgres 14 und höher das LATERAL join kann mit der Funktion string_to_table() verwendet werden, um diese Transformation zu erreichen. Die minimale Form der Abfrage ist:

SELECT token, flag
FROM tbl, string_to_table(subject, ' ') token
WHERE flag = 2;

Für Postgres 13 und früher sollte unnest(string_to_array(subject, ' ')) anstelle von string_to_table(subject, ' ') verwendet werden.

Die Funktion string_to_table() teilt die Betreffspalte in separate Token auf, eines für jede Zeile, mit demselben Wert für die Flag-Spalte. Die WHERE-Klausel filtert die Ergebnisse, um nur Token anzuzeigen, die mit dem Wert 2 gekennzeichnet sind.

Diese Lösung bietet eine präzise und effiziente Möglichkeit, eine Textspalte in Postgres in einzelne Zeilen aufzuteilen.

Das obige ist der detaillierte Inhalt vonWie teile ich eine Textspalte in PostgreSQL in mehrere Zeilen auf?. 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