天天看點

Oracle與DB2中内置函數substr(char,position,substring_length)的解析

Oracle與DB2中的substr()都是是截取給定字元串的字元,但是兩者是有差異的。

Oracle:引用自 Oracle.SQL.Reference.10g.r2

The SUBSTR functions return a portion of char, beginning at character position,

substring_length characters long.

DB2:引用自 DB2_UDB_V8_SQL_REFERENCE

The SUBSTR function returns a substring of a string.

對于其他的我不做過多的說明,我在這裡隻是想說明他們在對于第二、三個參數上的差異做一些解析。

position,代表的是我們要截取的字元串char的起始位置。substring_length是指我們要截取的長度,這裡兩個資料庫的處理方式就有分歧了。

在Oracle中,我們的substring_length長度是可以大于等于char字元串的長度的,但是函數本身的處理是依據你的起始位置position到char字元串結尾位置的長度來處理,并不會跟你所給定的substring_length來确定,相當于是Oracle為我們做了正确性的辨識并處理掉多餘的長度。

在DB2中,如果substring_length的長度大于了起始位置到結束位置之間的長度,那麼資料庫隻為我們報錯,并不會像Oracle那樣執行出我們想得到的結果。

《并且Oralce與DB2裡的position取值也存在差異,在Oralce中,position是可以取值為0的,但是在DB2中,取值為0的話會報錯。》position都是從1開始算。substr()是指從position開始算(包括position這個字元),截取的長度,也包括位置+長度所在的字元(前提是字元串的長度大于或等于兩者之和)。

是以,我們在使用substr()函數的時候,要多加留意,特别是在不同資料庫上使用時,一定要做各自的深入分析,不然我們的取值可能就會報錯,或者報一些SQL錯誤。