Ich möchte eine elegante Möglichkeit finden, das Verhalten der MySQL subtring_index() Funktion in Postgres zu emulieren.Emulation von MySQL substring_index() in PGSQL
In MySQL, dann ist es so einfach wie:
mysql> create temporary table test1(test varchar(200));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into test1 values('apples||oranges'),('apples||grapes');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from test1;
+-----------------+
| test |
+-----------------+
| apples||oranges |
| apples||grapes |
+-----------------+
2 rows in set (0.00 sec)
mysql> select substring_index(test, '||', 1) as field1, substring_index(test, '||', -1) as field2 from test1;
+--------+---------+
| field1 | field2 |
+--------+---------+
| apples | oranges |
| apples | grapes |
+--------+---------+
2 rows in set (0.00 sec)
Aber meine aktuelle Arbeit um in PGSQL ziemlich hässlich ist:
hoth=# create temporary table test1(test text);
CREATE TABLE
hoth=# insert into test1 values('apples||oranges'),('apples||grapes');
INSERT 0 2
hoth=# select * from test1;
test
-----------------
apples||oranges
apples||grapes
(2 rows)
hoth=# select substring(test, 0, position('||' in test)) as field1, substring(test, position('||' in test) + 2, char_length(test)) as field2 from test1;
field1 | field2
--------+---------
apples | oranges
apples | grapes
(2 rows)
Vielleicht gibt es eine elegantere Lösung, die einen regulären Ausdruck verwenden, oder vielleicht selbst wenn ich die Zeichenkette in ein Array in einer Variablen aufspalte, was den Overhead reduzieren könnte, wenn die Zeichenkette von einer Unterabfrage oder etwas abgeleitet wäre, würde ich alle Vorschläge begrüßen.
Ich nehme an, dass die Lösung von außen die Daten so speichert, dass sie besser zu den Abfragen passen, die Sie ausführen möchten (z. B. durch Normalisieren oder Verwenden eines Array-Typs). Mir ist klar, dass das nicht immer eine Option ist, aber ich dachte, ich würde es da rauswerfen, zumal dein MySQL-Beispiel speziell für die Aufteilung in genau 2 Teile codiert zu sein scheint. – IMSoP