今天看到PGSQL的函数这一节。
原文链接:https://www.f2er.com/postgresql/197414.htmlPOSTGREsql 相比MysqL多了好多实用的函数。
1、正则替换。
t_girl=# create table t_regexp(id serial not null,username char(20) );
NOTICE: CREATE TABLE will create implicit sequence "t_regexp_id_seq" for serial column "t_regexp.id"
TABLE
Time: 6.148 ms
t_girlinsert into t_regexp(usernamevalues ('Shit,shit''i I i I you';
INSERT 0 2
Time: 2.893 ms
t_girlselect * from t_regexp;
id | username
----+----------------------
1 | Shit| i I i I you
(2 rows)
Time: 0.296 ms
t_girlupdate t_regexp set username = regexp_replace'[Ss]''a''g'UPDATE 2
Time: 1.139 ms
t_girl| ahit.271 ms
t_girl'a(..)''S\\1P'.090 ms
t_girl| ShiPt.289 ms
t_girl#
可惜MysqL的REPLACE函数只能简单的替换字符串。
以往碰到这种正则替换,先把数据导出到文本,然后再外部用正则替换掉,再导入到数据库中。
2、字符分割。
获取分割指定的字符串部分,这个在MYSQL中也是只能用循环解决。
Time.306 ms
t_girlselect split_part'now,year,month'',';
split_part
------------
year
(1 row.328 ms
t_girl------------
month
.253 ms
t_girl#
这个在MysqL中只能通过写一个循环来判断。
至于双方的效率暂时还没有测试。
3、顺序替换字符,这个也是MysqL中没有的。
t_girlselect translate'mo''ab';
translate
----------------
nbwabnth
.309 ms
4、截取符合正则的子串。
t_girlSELECT SUBSTRING'XY1234Z''Y*?([0-9]{1,3})';
substring
-----------
1
.246 ms
t_girl'Y*?([0-9]{2,0);">-----------
12
(1 row)
5、等待更新。。。