postgresql是世界上功能最强大的开源数据库,在国内得到了越来越多机构和开发者的青睐和应用。随着postgresql的应用越来越广泛,oracle向postgresql数据库的数据迁移需求也越来越多。数据库之间数据迁移的时候,首先是迁移数据,然后就是sql、存储过程、序列等程序中不同的数据库中数据的使用方式的转换。下面根据自己的理解和测试,写了一些sql以及数据库对象转换方面的文章,不足之处,尚请多多指教。
substr函数是截取一个字符串的一部分,格式是substr(字符串,开始位置,长度)。oracle和postgresql都支持这个函数。但是具体使用的时候,有些不一样的地方。
oracle中,substr是一系列函数。还包括substrb, substrc, substr2, substr4等多个。分别是按照字符(substr)截取、按字节(substrb)截取、按unicode码(substrc)截取、按照ucs2编码(substr2)截取和按照ucs4码(substr4)截取。这几个函数的用法是一致的。
postgresql中,substr方法只支持字符方式。不支持其余的方式。参数和oracle是一样的。而且还有一个叫substring方法,和substr方法是一样的。
oracle和postgresql中的用法,区别就是当开始位置=0的时候,oracle表示的含义和1是一样的,从第一个字符开始截取。而postgresql相当于第一个字符再往前一个空字符。当第二个参数<0的时候,oracle代表开始位置从右侧开始算。而postgresql则表示则是从左侧望再前追加空字符。另外,postgresql参数还支持使用关键字from 和 for的写法,分别表示开始位置和长度。
length(字符串)函数是求得字符串的长度。oracle和postgresql都支持这个函数。
oracle中,length是一系列函数。还包括lengthb, lengthc, length2, length4等多个。分别是按照字符(length)取长度、按字节(lengthb)取长度、按unicode码(lengthc)取长度、按照ucs2编码(length2)取长度和按照ucs4码(length4)取长度。这几个函数的用法是一致的。
postgresql中,length方法只支持字符方式, 不支持其余的方式。参数和oracle是一样的。
迁移的时候,按照字符以外的方式取长度,postgresql还不支持。
trim函数用来除去字符串开头和结尾的指定字符(默认是空格)。ltrim可以除去左侧开头的指定字符,rtrim除去右侧开头的指定字符。
oracle的trim只能除去一个特定字符。两个以上不支持。改变字符的时候,使用关键字from。比如trim('a' from 'aabbccaa')这种写法。不支持trim('aabbcc', 'a')的这种写法。但是ltrim和rtrim支持多个字符。并且支持ltrim('aabbcc', 'a')和rtrim('aabbcc', 'c')这种写法,而不支持from关键字的写法。另外,trim的from关键字的写法中还支持both/ leading/ trailing三个关键字,分别代表除去 开头和结尾 / 开头 / 结尾的指定字符。
postgresql中,都支持除去开始结尾的多个字符。并且postgresql中, trim的两种写法都是支持的,而ltrim和rtrim和oracle一样, 支持ltrim('aabbcc', 'a')和rtrim('aabbcc', 'c')这种写法,而不支持from关键字的写法。postgresql的trim的from关键字的写法也支持both/ leading/ trailing三个关键字,分别代表除去 开头和结尾 / 开头 / 结尾的指定字符。
迁移的时候,可以直接迁移。