我想找到一個優雅的方式來模擬Postgres中MySQL的subtring_index()函數的行爲。在PGSQL中模擬MySQL的substring_index()
在MySQL中,它是那麼容易,因爲:
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)
但PGSQL我目前的解決辦法是相當難看:
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)
或許有使用正則表達式一個更優雅的解決方案,或者可能即使通過將字符串拆分爲變量中的數組,可能會減少開銷,如果字符串是從子查詢或其他東西派生的,我歡迎任何建議。
我想外面的現成解決方案是保存的方式,是更適合您要執行的查詢,您的數據(例如,通過標準化,或使用數組類型)。我意識到這並不總是一種選擇,但我認爲我會把它拋出去,特別是因爲你的MySQL例子看起來被專門編碼爲分成兩部分。 – IMSoP