天天看點

《卸甲筆記》-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

繼續閱讀