小编典典

在PGSQL中模拟MySQL的substring_index()

sql

我想找到一种优雅的方法来模拟Postgres中MySQL的subtring_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)

也许有使用正则表达式的更优雅的解决方案,或者甚至将字符串拆分为一个变量数组,如果该字符串是从子查询或其他内容派生的,则可以减少开销,我欢迎提出任何建议。


阅读 411

收藏
2021-04-07

共1个答案

小编典典

总是花时间浏览手册。

http://www.postgresql.org/docs/current/static/functions-
string.html

如果split_part(string text, delimiter text, field int)没有做您想做的(以及更多,如果我了解您的MySQL函数),那么您将需要解释在哪里以及为什么。

2021-04-07