SQL常用函数

1、常用函数的定义和类别

我们从数据表中SELECT查询数据时,就需要对数据进一步处理,获得符合期望的结果。这些处理就包括:执行计算与数学运算、转换数据、解析数值、组合值和聚合一个范围内的值等等。

函数类别

说明

聚合函数

执行的操作是将多个值合并为一个值。例如 COUNT、SUM、MIN 和 MAX。

配置函数

是一种标量函数,可返回有关配置设置的信息。

转换函数

将值从一种数据类型转换为另一种。

加密函数

支持加密、解密、数字签名和数字签名验证。

游标函数

返回有关游标状态的信息。

日期和时间函数

可以更改日期和时间的值。

数学函数

执行三角、几何和其他数字运算。

元数据函数

返回数据库和数据库对象的属性信息。

排名函数

是一种非确定性函数,可以返回分区中每一行的排名值。

行集函数

返回可在 Transact-SQL 语句中表引用所在位置使用的行集。

安全函数

返回有关用户和角色的信息。

字符串函数

可更改 char、varchar、nchar、nvarchar、binary 和 varbinary 的值。

系统函数

对系统级的各种选项和对象进行操作或报告。

系统统计函数

返回有关 SQL Server 性能的信息。

文本和图像函数

可更改 text 和 image 的值。

2、字符串函数

函数

说明

ASCII()

ASCII(@char)函数用于返回字符串表达式中最左侧的ASCII代码值。参数@char必须是一个char或varchar类型的字符串表达式。

CHAR()

CHAR(@integer)函数将整数类型的ASCII值转换为对应的字符,@integer是一个介于0~255之间的整数。如果该整数表达式不在此范围内,将返回null值。

LEFT()

LEFT(@char,@integer)函数返回字符串左边开始指定个数的字符串、字符或者二进制数据表达式。@char是字符串表达式,可以是常量,变量或字段。@integer为整数,指定@char将返回的字符数。

RIGHT()

与LEFT()函数相反,RIGHT(@char,@integer)返回字符串@char最右边@integer个字符。

LTRIM()

LTRIM(@char)用于除去字符串左边多余的空格,字符数据表达式@char是一个字符串表达式,可以是常量,变量,也可以是字符字段或者二进制数据列。

RTRIM()

RTRIM(@char)用于除去字符串右边多余的空格,字符数据表达式@char是一个字符串表达式,可以是常量,变量,也可以是字符字段或者二进制数据列。

STR()

STR(@float [ , length [ , decimal ] ])函数用于将数值数据转换为字符数据。@float是一个带有小数点的近似数字(float)数据类型的表达式。length表示总长度。它包括小数点、符号、数字以及空格,默认值为10。decimal指定小数点后的位数,decimal必须小于或等于16。如果decimal大于16,则会截断结果,使其保持小数点后有16位。

REVERSE()

REVERSE(s)将字符串s反转,返回的字符串的顺序和s的顺序相反。

LEN()

返回字符表达式中的字符数。如果字符串中包含前导空格和尾随空格,则函数将它们包含在内。LEN对相同的单字节和双字节字符串返回相同的值。

CHARINDEX()

CHARINDEX(str1,str,[start])函数返回子字符串str1在字符串str中的开始位置,start为搜索的开始位置,如果指定start参数,则从指定位置开始搜索;如果不指定start参数或者指定为0或者负值,则从字符串开始位置搜索。

SUBSTRING()

SUBSTRING(@value,@start,@length)函数返回字符表达式,二进制表达式,文本表达式或图像表达式的一部分。

@value是character、binary、text、ntext或image表达式。 

@start指定返回字符的起始位置的整数或表达式。如果@start小于0,或生成错误并终止语句。如果 @start大于值表达式的字符数,将返回一个零长度的表达式。 

@length是正整数或指定要返回的@value的字符数表达式。如果@length是负数,会生成错误并终止语句,如果@start与@length的总和大于@value中的字符数,则返回整个值表达式。 

LOWER()

LOWER(@char)将大写字符数据转换为小写字符数据后返回字符表达式。@char是指定要进行转换的字符串。

UPPER()

UPPER(@char)将小写字符数据转换为大写字符数据后返回字符表达式。@char指定要进行转换的字符串

REPLACE()

REPLACE(s,s1,s2)使用字符串s2替代字符串s中的s1。

执行代码:

(1)ASCII()函数

SELECT ASCII('h'),ASCII('H'),ASCII('5') 

(2)CHAR()函数

SELECT char(50),char(60),char(115)

(3)LEFT()函数

SELECT LEFT('BASKETBALL',5)

(4)RIGHT()函数

SELECT RIGHT('BASKETBALL',5)

(5)LTRIM()函数

select  '(' +'  book  ' +')' , '(' +LTRIM('  book  ') +')'

(6)RTRIM()函数

select  '(' +'  book  ' +')' , '(' +RTRIM('  book  ') +')'

(7)STR()函数

select  STR(3141.59,6,1) , STR(123.45,2,2)

说明:第一条语句6个数字和一个小数点组成的数值3141.59转换为长度为6的字符串,数字的小数部分舍入为1个小数位,第二条语句中的表达式超出指定的总长度时,返回的字符串为指定长度的两个**。

(8)REVERSE()函数

select  REVERSE('basketball')

(9)LEN()函数

select  LEN(' basketball ')

(10)CHARINDEX()函数

select  CHARINDEX('a','basketball'),CHARINDEX('a','basketball',3),CHARINDEX('ba','basketball',5)

(11)SUBSTRING()函数

select  SUBSTRING('basketball',1,6),SUBSTRING('basketball',LEN('basketball')/2,LEN('basketball'))

(12)LOWER()函数

select  LOWER('BASKETBALL'),LOWER('Basketball')

(13)UPPER()函数

select  UPPER('basketball'),UPPER('BAssketBall')

(14)REPLACE()函数

SELECT REPLACE('basketbaxx','x','l')

3、数学函数

数学函数主要用来处理数值数据,主要的数学函数有:绝对值函数,三角函数(包括正弦函数,余弦函数,正切函数,余切函数)、对数函数,随机函数等。在错误产生时,数学函数将返回空值null。

函数

说明

ABS()

绝对值函数,ABS(x)返回x的绝对值

PI()

返回圆周率的函数,PI()返回圆周率的值

SQRT()

平方根函数,SQRT(x)返回非负数x的二次方根

RAND()

获取随机函数的函数,RAND(x)返回一个随机浮点值v,范围在0~1之间(即0<=v<=1.0)。若指定一个整数参数x,则它被用作种子值,使用相同的种子数将产生重复序列。如果同一种子值多次调用RAND函数,它将返回同一生成值。

ROUND()

四舍五入函数,ROUND(x,y)返回接近于参数x的数,其值保留到小数点后面y位,若y为负值,则将保留x值到小数点左边y位。

SIGN()

符号函数,SIGN(x)返回参数的符号,x的值为负、零或正时,返回结果依次为-1、0或1。

CEILING()、FLOOR()

获取整数的函数,CEILING(x)返回不小于x的最小整数值,FLOOR(x)返回不大于x的最大整数值;

POWER()、SQUARE()、EXP()

幂运算函数

  • POWER(x,y)函数返回x的y次乘方的结果值;

  • SQUARE(x)函数返回指定浮点值x的平方; 

  • EXP(x)函数返回e的x乘方后的值。 

LOG()、LOG10()

  • 对数的运算,LOG(x)返回x的自然对数,x相对于基数e的对数。

  • LOG10(x)返回x的基数为10的对数。 

RANDIANS()、DEGREES()

  • 角度与弧度相互转换的函数,RANDIANS(x)将参数x由角度转换为弧度。

  • DEGREES(x)将参数x有弧度转换为角度。 

SIN()、ASIN()

  • 正弦函数、反正弦函数,SIN(x)返回x的正弦,其中x为弧度值;

  • ASIN(x)返回x的反正弦,即正弦x的值,若x不在-1到1的范围内,则返回NULL。 

COS()、ACOS()

  • 余弦函数、反余弦函数,COS(x)返回x的余弦,其中x为弧度值;

  • ACOS(x)返回x的反余弦,即余弦x的值。若x不在-1到1范围之内,则返回NULL; 

TAN()、ATAN()、COT()

  • 正切函数、反正切函数、余切函数,TAN(x)返回x的正切,其中x为给定的弧度值;

  • ATAN(x)返回x的反正切,即正切x的值; 

  • COT(x)返回x的余切。 

执行代码:

(1)绝对值ABS()函数和返回圆周率函数PI()

SELECT ABS(2),ABS(-3),PI()  

(2)平方根函数SQRT()

SELECT SQRT(2500),SQRT(60)

(3)获取随机函数RAND()

 SELECT RAND(),RAND(),RAND(),RAND(2),RAND(2),RAND(5)  

当RAND(X)中参数X 值固定时,生成的随机数也保持一致。

(4)四舍五入函数ROUND()

 SELECT ROUND(12.369,2),ROUND(-12.369,0),ROUND(12.369,-1),ROUND(12.369,-2)  

(5)符号函数SIGN()

 SELECT SIGN(-4),SIGN(0),SIGN(4) 

(6)获取整数函数CEILING()、FLOOR()

SELECT CEILING(3.141592),FLOOR(3.141592)

(7)幂运算函数POWER()、SQUARE()、EXP()

SELECT POWER(4,3),SQUARE(3.33),EXP(3)

(8)对数函数LOG()、LOG10()

SELECT LOG(2),LOG(3),LOG10(1),LOG10(1000) 

(9)角度弧度转换函数RANDIANS()、DEGREES()

select  RADIANS(90.0),RADIANS(180.0),DEGREES(PI()/2),DEGREES(PI())

(10)正弦函数,反正弦函数SIN()、ASIN()

select  SIN(PI()/2),SIN(PI()),ASIN(1),ASIN(0)

(11)余弦函数,反余弦函数COS()、ACOS()

select  COS(0),COS(PI()),ACOS(1),ACOS(0)

(12)正切函数、反正切函数、余切函数TAN()、ATAN()、COT()

select  TAN(0.3),ROUND(TAN(PI()/2),0),ATAN(0.30933624960962325),ATAN(1),COT(0.3),1/TAN(0.3),COT(PI()/4)

4、数据类型转换函数

在同时处理不同数据类型的值时,SQL Server一般会自动进行隐士类型转换。对于数据类型相近的值是有效的,比如int和float, 但是对于其它数据类型,例如整型和字符类型,隐士转换就无法实现了,此时必须使用显示转换。为了实现这种显示转换,T-SQL提供了两个显示转换函数,分别是CAST和CONVERT函数,CAST(x AS type)和CONVERT(type,x)函数将一个类型的值转换为另一个类型的值。

代码如下:

select  CAST('121231' AS DATE),CAST(100 AS CHAR(3)),CONVERT(TIME,'2012-05-01 12:11:10')

5、文本和图像转换函数

  1. TEXTPTR函数

TEXTPTR(column)函数用于返回varbinary格式的text、ntext或者image字段的文本指针值。查找到的文本指针值可应用于readtext,writetext和updatetext语句。其中参数column是一个数据类型为text、ntext或者image的字段列。

示例如下:查询authors表中[name]字段十六字节文本指针;

create  table  authors(id  int , [name]  text)
insert  into  authors  values(1 ,'this is a text')
select  id , TEXTPTR([name]) from  authors  where  id=1

运行结果如下:

2. TEXTVALID函数

TEXTVALID('table.column',text_ptr)函数用于检查特定文本指针是否为有效的text、ntext或image函数。table.column为指定数据表和字段,text_ptr为要检查的文本指针。

示例如下:检查是否存在用于authors表中decription字段中的各个值的有效文本指针。

select id,'this is a text' = TEXTVALID(('authors.name'),TEXTPTR(name))  from  authors

运行结果如下:

说明:第一个1为id的值,第二个1表示查询的值存在。

6、系统函数

1.返回表中指定字段的长度

COL_LENGTH(table,column)函数返回表中指定字段的长度值。其返回值为int类型,table为要确定其列长度信息的表的名称,是nvarchar类型的表达式。column为要确定其长度的列的名称,是nvarchar类型的表达式。

数据准备:

create  table  student (
fid  int  primary  key  identity(1,1),
fname  varchar(10))
insert  into  student  values('Jamse')

执行代码:

SELECT  COL_LENGTH('student' , 'fname')

运行结果如下:

2.返回表中指定字段的名称

COL_NAME(table_id,column_id)函数返回表中指定字段的名称。table_id是表的标识号,column_id是列的标识号,类型为int。

执行代码:

SELECT  COL_NAME(OBJECT_ID('student') , 1)

运行结果如下:

3.返回数据表达式的数据的实际长度函数

DATALENGTH(expression)函数返回数据表达式的数据的实际长度,即字节数。其返回值类型为int。null的长度为null。expression可以是任何数据类型的表达式。

执行代码:

SELECT  DATALENGTH(fname)  FROM  student  WHERE  fid=1

运行结果如下:

4.返回数据库的编号  

DB_ID(database_name)函数返回数据库的编号,其返回值为SMALLINT类型,如果没有指定database_name,则返回当前数据库的编号。

执行代码:

SELECT  DB_ID('LearnDb') , DB_ID()

运行结果如下:

7、自定义函数:标量函数与表值函数

自定义函数分为二种,一种是标量值函数,另一种是表格值函数。

1.标量值函数:返回一个标量值

代码如下:

CREATE  FUNCTION  MySTR(@strs  VARCHAR(50))
RETURNS  VARCHAR(50) 
AS
BEGIN
DECLARE  @str2  VARCHAR(30)SET  @str2=@strs
RETURN  @str2
END

调用1:

SELECT  dbo.MySTR('aa')  AS  result

运行结果如下:

调用2:

DECLARE  @str3  VARCHAR(30)
SET  @str3=(select  fname  from  student  where  fname=dbo.MySTR('Jamse')  and  fid=1 )
select  @str3

运行结果如下:

2.表格值函数

代码如下:

CREATE  FUNCTION   func_student(@fname  VARCHAR(10))
RETURNS TABLE 
AS 
return(select  fid , fname  from  student  where  fname  like  '%'+@fname+'%')

执行代码:

SELECT  *  FROM  func_student('J')

运行结果如下:

代码2如下:

CREATE  function  func_student2 (@fname  varchar(10))
Returns  @student  table(fid  int , fname  varchar(100))
As
Begin
Insert  @student  Select  fid , fname  from  student  WHERE fname  LIKE '%'+@fname+'%'
return
End

执行代码:

SELECT  *  FROM  func_student2('J')

运行结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值