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錯誤。