原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://yangwen.blog.51cto.com/337928/209694
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错误。
本文出自 “mai” 博客,请务必保留此出处http://yangwen.blog.51cto.com/337928/209694