天天看点

《卸甲笔记》-PostgreSQL和Oracle的SQL差异分析之五:函数的差异(五)

postgresql是世界上功能最强大的开源数据库,在国内得到了越来越多机构和开发者的青睐和应用。随着postgresql的应用越来越广泛,oracle向postgresql数据库的数据迁移需求也越来越多。数据库之间数据迁移的时候,首先是迁移数据,然后就是sql、存储过程、序列等程序中不同的数据库中数据的使用方式的转换。下面根据自己的理解和测试,写了一些sql以及数据库对象转换方面的文章,不足之处,尚请多多指教。

regexp_replace是使用正则表达式进行替换的函数。源字符串里面符合正则表达式的,替换成目标字符串。oracle和postgresql都支持regexp_replace,但是参数有些不同。

oracle的regexp_replace共有六个参数。分别表示源字符串,正则表达式,目标字符串,开始位置(默认为1),替换第几个匹配(默认全部)和一个flg值('i':大小写不敏感 ‘c’:大小写敏感 'n':点号,不匹配换行符号 'm‘:多行模式 'x':扩展模式,忽略正则表达式中的空白字符)。

postgresql中的regexp_replace只有四个参数,分别表示源字符串,正则表达式,目标字符串,替换规则(默认只替换第一个。当替换规则为'g'的时候代表全部替换)。

postgresql中的regexp_replace的功能没有oracle的regexp_replace的功能强。有些比较复杂的替换,只能自己通过函数实现。

regexp_substr是oracle的使用正则表达式进行字符串截取的函数。postgresql中的substring函数中可以实现它的简单功能,但是没有oracle的功能强。如果需要实现它的复杂功能,需要自己使用函数实现。

oracle的regexp_substr函数有五个参数。分别表示源字符串,正则表达式,开始位置(默认为1),截取第几个匹配(默认第一个)和一个flg值('i':大小写不敏感 ‘c’:大小写敏感 'n':点号,不匹配换行符号 'm‘:多行模式 'x':扩展模式,忽略正则表达式中的空白字符)。

postgresql中的regexp_substr只有三个参数,分别表示源字符串,正则表达式,逃匿符。

regexp_instr是oracle的一个搜索字符串中符合表达式的字串位置的一个函数。在postgresql中没有对应的函数,需要自己写函数实现它。

最简单的功能,可以使用position函数和substring函数来模拟实现。

regexp_like是oracle的一个检索正则表达式条件的一个函数,只能用在条件判断部分。在postgresql中没有对应的函数,需要自己写函数实现它。

最简单的功能,可以简单的使用substring和length函数来模拟。

参考文档:

postgresql 9.4.4 中文手册:

database sql language reference:

<a href="http://docs.oracle.com/cd/e11882_01/server.112/e41084/functions148.htm#sqlrf06300">http://docs.oracle.com/cd/e11882_01/server.112/e41084/functions148.htm#sqlrf06300</a>

<a href="http://docs.oracle.com/cd/e11882_01/server.112/e41084/functions149.htm#sqlrf06302">http://docs.oracle.com/cd/e11882_01/server.112/e41084/functions149.htm#sqlrf06302</a>

<a href="http://docs.oracle.com/cd/e11882_01/server.112/e41084/functions150.htm#sqlrf06303">http://docs.oracle.com/cd/e11882_01/server.112/e41084/functions150.htm#sqlrf06303</a>

<a href="http://docs.oracle.com/cd/e11882_01/server.112/e41084/conditions007.htm#sqlrf00501">http://docs.oracle.com/cd/e11882_01/server.112/e41084/conditions007.htm#sqlrf00501</a>

上一篇: ORACLE