不同数据库中substring的差异
substring在不同数据库中存在差异,该函数用来求一个字符串的字串。该函数的使用频率很高。下面介绍在不同的数据库中该函数的使用方法与差异。
字符串:”2011-11-17”
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 | 0 | 1 | 1 | - | 1 | 1 | - | 1 | 7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 | 0 |
1.在Oracle中求字符串的函数为:substr
The syntax for the substr function is:
substr( string, start_position, [ length ] )
string:源字符串
start_position:子串第一个字符在源字符串中的起始位置
length:子串长度
测试结果:
| 1 | substr('2011-11-17',0,7) | 2011-11 |
| 2 | substr('2011-11-17',1,7) | 2011-11 |
| 3 | substr('2011-11-17',1,10) | 2011-11-17 |
| 4 | substr('2011-11-17',1,11) | 2011-11-17 |
| 5 | substr('2011-11-17',-1,7) | 7 |
| 6 | substr('2011-11-17',-8,8) | 11-11-17 |
| 7 | substr('2011-11-17',-10,7) | 2011-11 |
| 8 | substr('2011-11-17',-11,7) | null |
| 9 | substr('2011-11-17',-11) | null |
| 10 | substr('2011-11-17',-1) | 7 |
| 11 | substr('2011-11-17',6) | 11-17 |
| 12 | substr('2011-11-17',11) | null |
| 13 | substr (‘2011-11-17’,1,null) | null |
| 14 | substr (‘2011-11-17’,null,1) | null |
| 15 | substr (‘2011-11-17’,null,null) | null |
| 16 | substr ('2011-11-17',1,0) | null |
| 17 | substr ('2011-11-17',1,-1) | null |
| 18 | substr ('2011-11-17',11,11) | null |
Oracle中规定:
1) start_position==0时,子串的起始位置为1,即从第一个字符开始;
2) start_position<0时,字串的起始位置从字符串尾部开始后推。
3) length参数可以缺省。
2. 在SqlSever中求字符串的函数为:substring
Syntax:
SUBSTRING ( value_expression , start_expression , length_expression )
value_expression:字符串,二进制数据,文本,图像
start_expression:子串第一个字符在源字符串中的起始位置
length_expression:子串长度
测试结果:
| 1 | substring (‘2011-11-17’,0,7) | 2011-1 |
| 2 | substring (‘2011-11-17’,1,7) | 2011-11 |
| 3 | substring (‘2011-11-17’,1,10) | 2011-11-17 |
| 4 | substring (‘2011-11-17’,1,11) | 2011-11-17 |
| 5 | substring (‘2011-11-17’,-1,7) | 2011- |
| 6 | substring (‘2011-11-17’,-8,8) |
|
| 7 | substring (‘2011-11-17’,-10,7) |
|
| 8 | substring (‘2011-11-17’,-11,7) |
|
| 9 | substring (‘2011-11-17’,-11) | error |
| 10 | substring (‘2011-11-17’,-1) | error |
| 11 | substring (‘2011-11-17’,6) | error |
| 12 | substring (‘2011-11-17’,11) | error |
| 13 | substring (‘2011-11-17’,1,null) | null |
| 14 | substring (‘2011-11-17’,null,1) | null |
| 15 | substring (‘2011-11-17’,null,null) | null |
| 16 | substring ('2011-11-17',1,0) |
|
| 17 | substring ('2011-11-17',1,-1) | error |
| 18 | substring ('2011-11-17',11,11) |
|
| 19 | substring ('2011-11-17',-1,1) |
|
| 20 | substring ('2011-11-17',-1,2) |
|
| 21 | substring ('2011-11-17',-1,3) | 2 |
| 22 | substring ('2011-11-17',-1,9) | 2011-11 |
SqlServer中规定:
1) start_expression<1时,
length_expression = max(start_expression + length_expression – 1,0),
子串的起始位置为1,即从第一个字符开始;
2) substring中三个参数缺一不可;
3) 字符串长度不能为负数。
3.扩展:
由于MySqL和DB2的数据库没装,就不去测试,现在把相关学习网址附上。
| Oracle | |
| Sqlserver | |
| Mysql | http://dev.mysql.com/doc/refman/5.0/en/string-functions.html |
| DB2 |
本文对比了Oracle和SqlSever中Substring函数的不同用法及参数处理方式,包括子串的起始位置与长度等,并提供了多个测试案例。
2万+

被折叠的 条评论
为什么被折叠?



