我想找到一种优雅的方法来模拟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)
也许有使用正则表达式的更优雅的解决方案,或者甚至将字符串拆分为一个变量数组,如果该字符串是从子查询或其他内容派生的,则可以减少开销,我欢迎提出任何建议。
总是花时间浏览手册。
http://www.postgresql.org/docs/current/static/functions- string.html
如果split_part(string text, delimiter text, field int)没有做您想做的(以及更多,如果我了解您的MySQL函数),那么您将需要解释在哪里以及为什么。
split_part(string text, delimiter text, field int)