不同数据库中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 |