二、字符串函数
一般形式为:
select function_name(arguments)
拼接二进制或字符表达式:
select (expression+expression+………)
当拼接非字符、非二进制表达式时,必须使用convert函数将其转换为字符类型或二进制类型的数据;
如:select name+”的工资为:”+convert(varchar(12),salary) from auths where sex=0
?
? 大多数字符串函数仅能用于char和varchar以及那些可隐式地转换成char和varchar的数据类型。
拼接可用于binary和varbinary列上,也可用在char和varchar列上。
字符串可以嵌套,并可用在任何允许表达式存在的地方。当常量同字符串函数一起使用时,要将常量用单引号或双引号括起来。
?
字符串函数
char_expr是char、varchar、binary或varbinary类型的字符数据表达式
integer_expr是一个正整数
pattern是用于模式匹配的char_expr
float_expr是浮点类型值
?
函数名 | 参数 | 返回结果 |
Ascii | (char_expr) | 返回表达式中第一个字符的ASCII编码 |
Char | (integer_expr) | 将单字节的integer值转换为character值。Char通常作为ascii的反函数使用。Integer_expr必须是0到255之间的数。 返回的是char数据类型。如果结果值是多字节字符的第一字节,则字符将是未定的。 |
Charindex | (expression1,expression2) | 查找expression1在expression2中的起始位置并返回表示起始位置的integer整数值。如果没有找到expression1则返回0。如果expression1包含通配符,将其按文字处理。 |
Char_length | (char_expr) | 返回字符串表达式或text值的长度。对于表中列的可变长数据,在计算字符表达式长度时去掉尾空格。对于多字节字符集,字符长度小于字节数,使用系统函数来确定字节数。 |
Difference | (char_expr1,char_expr2) | 返回表示两个soundex值不同的整数值。 |
Lower | (char_expr) | 将大写字母转换成小写字母,返回character类型值 |
Itrim | (char_expr) | 删除字符串表达式中的前导空格。只有与SQL中指定的字符集中的空格值等价的字符才被删除。 |
Patindex | (“%pattern%”, char_expr[using{bytes| chars|characters}]) | 返回在指定字符串中第一次出现pattern的起始位置的integer型数据,如果没有找到pattern则返回0。缺省情况下返回字符的偏移量(多个字节的字符串)必须指定using bytes。通配符”%”必须放在pattern的前面或后面。除非要找的位置为起始字符或结尾字符。该函数可被用于text数据 |
Replicate | (char_expr,integer_expr) | 返回一个与char_expr的类型相同的字符串。该字符串是char_expr次的结果(当结果多于255个字节时,则只取前255个字节)。 |
Reverse | (expression) | 逆转字符串或二进制数据的值。如果表达式是“abcd”则返回“dcba”;如果表达式是”0x12345000”,则返回”0x00054321 |
Right | (expression,integer_expr) | 返回从右边开始指定个数的字符串或二进制expression的一部分。返回值同expression具有相同的数据类型 |
Rtrim | (char_expr) | 删除尾空格。只有与SQL中指定的字符集中的空格值等价的字符才被删除。 |
Soundex | (char_expr) | 返回由相邻的单字节或双字节正体字母组成的字符串的一个4字符的soundex代码 |
Space | (integer_expr) | 返回integer_expr个单字节空格组成的字符串 |
Str | (approx_numeric[,length[,decimal]]) | 返回代表浮点数的字符串。Length指定返回的字符串数目(包括小数点、小数点左边和右边所有的数字和空格);decimal指定结果返回的小数位数;length和decimal是可选项,如果选定,则必须为非负数。缺省的length为10,省的decimal为0.为了与指定的length相符,该函数四舍五入小数部分 |
Stuff | (char_expr1,start,length,char_expr2) | 从char_expr1中删除start开始的length个字符,然后将char_expr2插入到char_expr2的start处。如果只删除字符而不插入字符,则必须将char_expr2指定为null,而不是“”,“”表示一个空格 |
Substring | (expression,start,length) | 返回字符串或二进制钟的一部分。Start指定子串的开始位置。Length指定子串的长度。 |
Upper | (char_expr) | 将小写字符串转换为大写字符串 二进制串 列名或它们之间的组合。把字符串放到单引号或双引号中 |
+ | expression | 拼接两个或更多的字符串、二进制串、列名或它们之间的组合。把字符串放到单引号或双引号中。 |
?
下面是使用字符串函数的例子。
例一:substring函数
显示58年11月11日以后出生的所有作家居住的城市:
select name,substring(address,1,4)
from auths
where birthdate>”19588/11/11”
结果:
name
王达林??? 北京
许灵验??? 呼和
张启迪??? 北京
郝丹盈??? 上海
王军????? 上海
例二:charindex和patindex函数的使用
这两个函数都返回一个指定字符表达式或二进制表达式的起始位置。它们都要求两个参数,但它们有一点小小的差别。
Charindex仅可用在char和varchar列上,而patindex还可用在text列上;patindex可使用通配符,而charindex则不能。
它们都有两个参数:
第一个参数是指定其位置的字符表达式或二进制表达式。
对于patindex,必须将字符表达式或二进制表达式括在“%”中,除非寻找的表达式为起始字符串(可省略前面的“%”)或最后的字符串(可省略尾部“%”)。
对于charindex,表达式中不能包括通配符。
第二个参数是一个字符串表达式,通常是一列名。Adaptive Server将在其中找出指定的字符表达式或二进制表达式。
用上述两个函数找出表auths中title列字符串“微软”的开始位置的查询语句是:
select charindex(“微软”,title),patindex(“%微软%”,article_text)
from article
where author_code=”A00001”
结果:
——
1????????????????????? 1
0????????????????????? 1
patindex找出表sysobjects中以sys开始,并且第4个字符是a,b,c或d的所有行。
Select name
From sysobjects
Where patindex(“sys[a-d]%”,name)>0
结果:
——
sysalternates
sysattributes
syscolumns
syscomments
sysdepends
例三:使用str函数
str函数用于将float类型的数字转换成字符串。此函数带有指定整数长度(小数点以前的数字部分)和小数点后面位数的可选项。对str来讲,长度和小数参数不应该是负数。
长度的缺省是10,指定的长度应至少等于或大于数的小数点前的部分加上数的符号(如果有的话),即:
??? length>=整数部分+正负号
如果float_expr超过指定长度,则结果中返回指定长度的字符串“**”。
?
Select str(123.45,2,2)? 结果:**
Select str(123.45,6,2)? 结果:123.45
例四:使用stuff函数
stuff函数将一字符串插入到另一字符串。它首先删掉在expr1中从起始位置开始的指定长度的字符,然后再从起始位置插入expr2字符串。如果起始位置或长度是负值,则返回一个空值字符串。如果起始位置长于expr1,也返回一个空值字符串。如果删除长度比expr1长,则删除到expr1中的最后一个符。
Select stuff(“abc”,2,3,”rgf”)???? 结果:argf
?
一些函数的使用
1、? 拼接
语法:select (expression+expression……)
select (“abc”+”def”)?????????? 结果:abcdef
?
select “作家代码列表”=”(“+name+”)”+”作家的代码是:”+author_code
from auths
where author_code<’A0007’
结果:
作家代码列表
——
(王达林)作家的代码是:A0001
?
要拼接数字或日期类型的数据,必须使用转换函数convert
select name+”的出生日期是:”+convert(varchar(30),birthdate)
from auths where sex=0
结果:
——
王达林的出生日期是:Nov 12 1958 12:00AM
2、? 拼接(concatenation)和空字符串
空字符串(一对双引号或一对单引号),被当作一个空格处理。
Select “abc”+””+”def”
结果:
——
abc def
3、? 字符串函数的嵌套
显示出女作家的姓名及其出生年
select name+”生于”+substring(convert(varchar(30),birthdate),8,4)+”年
from auths where sex=0
结果:
——
王达林生于1958年
?
显示女作家的工资额
select name+”的工资为:”+str(salary,5,1)
from auths where sex=0
结果: 王达林的工资为:120.0