postgresql是世界上功能最强大的开源数据库,在国内得到了越来越多机构和开发者的青睐和应用。随着postgresql的应用越来越广泛,oracle向postgresql数据库的数据迁移需求也越来越多。数据库之间数据迁移的时候,首先是迁移数据,然后就是sql、存储过程、序列等程序中不同的数据库中数据的使用方式的转换。下面根据自己的理解和测试,写了一些sql以及数据库对象转换方面的文章,不足之处,尚请多多指教。
oracle的nlssort可以改变取得字段的排序方式。默认的情况下,西文的排序是按照二进制编码的顺序排序。对于汉字按照拼音来排序。可以使用nlssort来改变字段的默认排序方式,从而取得不同的顺序。
以中文为例,排序可以有:
按照部首(第一顺序)、笔划(第二顺序)排序(schinese_radical_m)
按照笔划(第一顺序)、部首(第二顺序)排序(schinese_stroke_m)
按照拼音排序(schinese_pinyin_m)
等三种。默认是按照拼音来排序。
不使用参数的时候,自动采用session内的默认值。
postgresql中,对于西文按照二进制,对于汉字只是按照拼音来排序。同一种编码,其余的排序方式尚不支持。
oracle的nls_initcap(x[,'nls_sort=y']) 、nls_lower(x[,'nls_sort=y'])、nls_upper(x[,'nls_sort=y']) 三个函数都有两个参数,可以根据y参数的不同,提供不同于系统默认值的结果。如果不提供这个参数,那么结果和initcap、lower和upper三个函数是一样的。
我这边做不出相同的效果。网上也没搜到。怀疑是老版的oracle有这种做法,新版已经取消。
postgresql中,对于同一种编码,没有提供多种方式排序。只有简单的initcap, lower和upper函数。
另外,在实际使用中,这几个带nls_的方法都几乎用不到。
postgresql 9.4.4 中文手册:字符串函数
<a href="http://www.postgres.cn/docs/9.4/functions-string.html">http://www.postgres.cn/docs/9.4/functions-string.html</a>
database sql language reference:
<a href="http://docs.oracle.com/database/121/sqlrf/functions122.htm#sqlrf00676">http://docs.oracle.com/database/121/sqlrf/functions122.htm#sqlrf00676</a>
<a href="http://docs.oracle.com/database/121/sqlrf/functions123.htm#sqlrf00677">http://docs.oracle.com/database/121/sqlrf/functions123.htm#sqlrf00677</a>
<a href="http://docs.oracle.com/database/121/sqlrf/functions125.htm#sqlrf00678">http://docs.oracle.com/database/121/sqlrf/functions125.htm#sqlrf00678</a>
<a href="http://docs.oracle.com/database/121/sqlrf/functions124.htm#sqlrf00679">http://docs.oracle.com/database/121/sqlrf/functions124.htm#sqlrf00679</a>