sql server 使用函数辅助查询

函数是所有语言系统下都具备的内部数据处理过程,SQL SERVER也同样内置了许多函数。在SQL SERVER中,函数是由一个或多个T-SQL语句组成的子程序。利用函数可以简化数据的处理操作。

函数分为 内置函数 和 用户定义函数 两种。用户定义函数接受零个或多个输入参数,并返回标量值或表。

一、数据类型转换函数

1、CAST(expression, AS date_type)

将表达式值转换为指定的数据类型。

例如:

SELECT CAST ( ‘ 2015-10-15 ‘ AS datetime )

SELECT CAST ( GETDATE () AS char )

SELECT CAST ( ‘ 123 ‘ AS int )

2、CONVERT(date_type[(length)], expression[,style])

与CAST函数相似,

date_type(length) 规定目标数据类型。

style 规定日期/时间的输出格式。

下表为日期型与字符型转换时 style的取值。

例如:

SELECT CONVERT ( char , GETDATE (), 101 )

style取值

无世纪值

|

style取值

有世纪值

|

标准

|

输入/输出

—|—|—|—
|

0或100

|

默认值

|

mm dd yyyy hh:miAM(或)PM

1

|

101

|

美国

|

mm/dd/yyyy

2

|

102

|

ANSI

|

mm dd yyyy hh:miAM(或)PM

|

9或109

|

默认值+毫秒

|

mm-dd-yy

10

|

110

|

美国

|

yymmdd

12

|

112

|

ISO

|

二、 日期函数

1、GETDATE()

该函数返回当前系统日期时间。

例如:

SELECT GETDATE ()

返回结果:2009-02-22 23:05:52.483

2 、DATEPART(datepart,date_expression)

返回日期表达式值的指定部分,

返回值为数值型数据。

例如:

SELECT DATEPART ( YEAR , GETDATE ())

SELECT DATEPART ( MONTH , GETDATE ())

SELECT DATEPART ( DAY , GETDATE ())

date型数据日期部分的可能取值:

datepart

|

缩 写

|

说  明

—|—|—

year

|

yy, yyyy

|

quarter

|

qq, q

|

季度

month

|

mm, m

|

Day of year

|

dy, y

|

一年中的第几天

day

|

dd, d

|

一月中的第几天

week

|

wk, ww

|

一年中的第几周

hour

|

hh

|

小时

minute

|

mi, n

|

second

|

ss, s

|

millisecond

|

ms

|

千分之一秒

3、DATENAME(datepart,date_expression)

该函数返回日期表达式值的指定部分的名称,

返回值为字符型数据。例如:

SELECT DATENAME ( YEAR , GETDATE ())

SELECT DATENAME (WEEKDAY, GETDATE ())

4、DATEADD(datepart, interge_expression, date_expression )

该函数返回日期表达式值的指定部分, 加上整数表达式值后的日期时间。

SELECT DATEADD ( day , 10 , GETDATE ())

5、DATEDIFF(datepart, date_expression1, date_expression2)

该函数返回日期表达式1的值和日期表达式2的

值在指定部分的差值。例如:

 1 DECLARE @t1 datetime,@t2 datetime
2 SET @t1=GETDATE()
3 WAITFOR delay '00:00:02'
4 SET @t2=GETDATE()
5 SELECT DATEDIFF(SECOND,@t1, @t2) 

6、DAY(date_expression)

该函数返回日期表达式值的“日”部分。

例如:

SELECT DAY ( GETDATE ())

7、MONTH(date_expression)

该函数返回日期表达式值的“月”部分。

例如:

SELECT MONTH ( GETDATE ())

8、YEAR(date_expression)

该函数返回日期表达式值的“年”部分。

例如:

SELECT YEAR ( GETDATE ())

9、getutcdate

返回当前utc时间(世界标准时间)。

例如:

select getutcdate()

三、 聚合函数

1、COUNT([ALL | DISTINCT]expression | * )

2、AVG( ), MAX( ), MIN( ), SUM( )

3、VAR( ), VARP( ), STDEV( ), STDEVP( )

四、 数学函数

1、ABS(numeric_expression)

该函数返回表达式值(bit型除外)的绝对值,返回值的数据类型与原数据类型一致。

例如:

SELECT ABS ( - 3.0 ), ABS ( 2.0 ), ABS ( 0.0 )

2、AVG([ALL|DISTINCT]numeric_expression)

该函数返回查询出的一组数据的平均值。

例如:

SELECT AVG (grade) from score where cno = 1

3、COUNT([ALL | DISTINCT]expression | * )

该函数返回查询出的表达式数。

例如:

SELECT count (grade) from score where cno = 1

4、CEILING(numeric_expression)

返回最小的大于或等于表达式值的整数值。

例如:

SELECT CEILING ($ 99.99 ), CEILING ($ - 99.99 ) , CEILING ($ 0.0 )

5、FLOOR(numeric_expression)

返回最大的小于或等于表达式值的整数值。

例如:

SELECT FLOOR ($ 99.99 ), FLOOR ($ - 99.99 ) , FLOOR ($ 0.0 )

6、RAND([integer_expression])

该函数返回一个位于0与1之间的随机数。表达式值作为产生随机数的起始值,返回值为浮点型数。

例如:

DECLARE @number smallint
SET @number=1 
WHILE (@number<=3)
BEGIN
      SELECT  RAND(@number)
      SET @number=@number+1
END
GO

7、ROUND(numeric_expression, int_expression1, [integer_expression2])

当 int_expression1 为正数时,numeric_expression 四舍五入为 int_expression1所指定的小数位数。

当 int_expression1为负数时,numeric_expression 则按 int_expression1所指定的位数在小数点的左边四舍五入.

当 int_expression2 非零时,表示用int_expression1表示的精度对numeric_expression进行截短。

SELECT ROUND ( 2456.12582 , 3 ) 返回结果为2456.12600。

SELECT ROUND ( 2456.12582 , 3 , 1 ) 返回值为2456.12500。

ROUND ( 748.58 , - 1 ) 返回值为750.00

ROUND ( 748.58 , - 2 ) 返回值为700.00

ROUND ( 748.58 , - 4 ) 返回值为0

五、 字符串函数

1、ASCII(chracter_expression)

返回字符的ASCII码值,返回值为整型数据。

例如:

SELECT ASCII ( ‘ a ‘ ), ASCII (‘Z’) 返回结果为:97 90

2、CHAR(inter_expression)

该函数返回ASCII码值代表的字符。

例如:

SELECT CHAR ( 97 ), CHAR ( 90 ) 返回结果为:a Z

3、LEN(charater_expression)

该函数返回字符串的长度,即字符的个数,

注意1个汉字计为一个字符。

例如:

SELECT len ( ‘ 张三 ‘ ), len ( ‘ abc ‘ ) 返回结果为:2 3

4、DATALENGTH(expression)

返回表达式所占用的字节数,

常用于查看变长数据类型的长度。

select datalengh(‘ 100 ’), datalength ( 100 )

5、LEFT(chracter_expression, integer_expression)

返回字符串从左边开始指定个数的字符。

select LEFT ( ‘ sdf ‘ , 1 ) +LEFT ( ‘ qlsdf ‘ , 2 )

6、RIGHT(chracter_expression, integer_expression)

返回字符串从右边开始指定个数的字符。

7、SUBSTRING(chracter_expression, begin_integer_expression, lenth_integer_expression )

返回字符串在起始位置开始的指定长度的子串。

例如:

SELECT SUBSTRING ( ‘ traffic ‘ , 3 , 4 )

8、UPPER(chracter_expression)

该函数返回字符的大写形式。

例如:

SELECT upper ( ‘ traffic’)

9、LOWER(chracter_expression)

该函数返回字符的小写形式。

10、SPACE(integer_expression)

该函数返回指定长度的空格字符串。

SELECT ‘ 放假 ‘ + SPACE ( 6 ) + ‘ 美呀! ‘

11、REPLICATE(chracter_expression, integer_expression)

该函数将字符串复制指定的遍数。

例如:

SELECT REPLICATE (‘SQL’, 3 ) 返回结果为:SQLSQLSQL

12、STUFF(chracter_expression1, begin_integer_expression,length, chracter_expression2)

该函数将字符串1从开始位置到结束位置中的

字符删去然后将字符串2填充进去。

SELECT STUFF (‘SQlver’, 3 , 1 ,’L Ser’)

13、REVERSE(chracter_expression)

该函数返回字符串的反序字符串。

SELECT REVERSE (‘SQL’)

14、LTRIM(chracter_expression)

该函数返回删除字符串左端空格后的字符串。

SELECT LEN (‘ SQL‘), LEN ( LTRIM (‘ SQL‘))

15、RTRIM(chracter_expression)

该函数返回删除字符串右端空格后的字符串。

16、STR(float_expression[ integer_expr ession1[,integer_expression2]])

该函数返回浮点表达式值的字符串形式。

表达式1为字符串长度,表达式2为小数位数。

若无表达式2,默认为0;

若无表达式1,默认为浮点数的整数部分长度。

例如:

SELECT  STR( **123.456** ), STR( **123.456** , **4** , **1** ),STR( **123.456** , **6** , **4** )

返回结果为:123 123 123.46

六、 判定函数

1、ISDATE(expression)

该函数判断表达式是否为一个合法的日期型

数据,是则返回1,否则返回0。

1 IF ISDATE('2009-05-12 10:19:41.177')= **1**  PRINT 'VALID'
2 ELSE
3 PRINT 'INVALID'

2、ISNUMERIC(expression)

该函数判断表达式是否为一个合法的数值型

数据(包括整数型、数值型和浮点型),

是则返回1,否则返回0。

SELECT ISNUMERIC ( 56.6 )

SELECT ISNUMERIC ( ‘ hello ‘ )

3、ISNULL(expression1,expression2)

该函数判断表达式1的值是否为NULL,

是则返回表达式2的值,

不是则返回表达式1的值。例如:

SELECT SNO,CNO, ISNULL (grade, 0 ) FROM SCORE

4、NULLIF(expression1,expression2)

该函数判断表达式1的值是否与表达式2的值相等,是则返回NULL,否则返回表达式1的值。

SELECT NULLIF (‘ABc’,’AB’)

SELECT NULLIF (‘AB’,’AB’)

七、 用户自定义函数

1、标量值函数的定义

CREATE FUNCTION [所有者名.]函数名

([{形式参数[AS]类型[=默认值]}[,…n]])

RETURNS 返回值类型

[AS]

BEGIN

函数体

RETURN 标量表达

END

参数说明:

1) 形式参数的数据类型为系统的基本标量类型,不能为timestamp类型、用户定义数据类型和非标量类型

(如cursor和table)。

2) 返回值类型为系统的基本标量类型,但text、ntext、image和timestamp除外。

3) 函数体由T-SQL语句序列构成。

4) 函数返回标量表达式的值。

2、表值函数的定义

CREATE FUNCTION [所有者名.]

函数名([{形式参数[AS]类型[=默认值]}[,…n]])

RETURNS TABLE

[AS]

RETURN [(select语句)]

参数说明:

1)形式参数的数据类型为系统的基本标量类型,不能为timestamp类型、用户定义数据类型和非标量类型

(如cursor和table)。

2) TABLE关健字指定此函数返回一个表.

3) 函数返回select语句的结果。

当调用用户自定义函数时,必须提供函数名和参数,标量函数可以在SELECT语句中调用,或用EXEC语句执行调用,调用形式分别为:所有者名.函数名(实参1, 实参2, …实参n)

其中用EXEC语句调用时参数次序可与定义时不同,表型函数只能通过SELECT语句调用。

可有两种方法删除用户已定义的函数即用命令方式和界面方式,

命令格式为:

DROP FUNCTION {[owner_name]function_name}[,…n]

博客园博客:欠扁的小篮子

坚持原创技术分享,您的支持将鼓励我继续创作!
0%