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 |
substr (‘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 |
http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp topic=%2Fcom.ibm.db2.doc.sqlref%2Ffsubstr.htm |
摘自 pcenshao