函数是所有语言系统下都具备的内部数据处理过程,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('' 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的

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

 DECLARE @t1 datetime,@t2 datetime
SET @t1=GETDATE()
WAITFOR delay '00:00:02'
SET @t2=GETDATE()
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_expression1[,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。

 IF ISDATE('2009-05-12 10:19:41.177')=1 PRINT 'VALID'
ELSE
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]

sql server 使用函数辅助查询的更多相关文章

  1. SQL Server 聚合函数算法优化技巧

    Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值 ...

  2. 数据库开发基础-SQl Server 聚合函数、数学函数、字符串函数、时间日期函数

    SQL 拥有很多可用于计数和计算的内建函数. 函数的语法 内建 SQL 函数的语法是: SELECT function(列) FROM 表 函数的类型 在 SQL 中,基本的函数类型和种类有若干种.函 ...

  3. Sql Server REPLACE函数的使用;SQL中 patindex函数的用法

    Sql Server REPLACE函数的使用 REPLACE用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式. 语法REPLACE ( ''string_replace1'' ...

  4. SQL Server用户自定义函数

    用户自定义函数不能用于执行一系列改变数据库状态的操作,但它可以像系统 函数一样在查询或存储过程等的程序段中使用,也可以像存储过程一样通过EXECUTE 命令来执行.在 SQL Server 中根据函数 ...

  5. 13、SQL Server 自定义函数

    SQL Server 自定义函数 在SQL Server中不仅可以使用系统函数(如:聚合函数,字符串函数,时间日期函数等)还可以根据需要自定义函数. 自定义函数分为标量值函数和表值函数. 其中,标量值 ...

  6. SQL SERVER 2008- 字符串函数

    /* 1,ASCII返回字符表达式中最左侧字符的ASCII代码值 仅返回首字母的ASCII码值 parameter char或varchar returns integer */ SELECT ASC ...

  7. sql server自定义函数学习笔记

    sql server中函数分别有:表值函数.标量函数.聚合函数.系统函数.这些函数中除系统函数外其他函数都需要用户进行自定义. 一.表值函数 简单表值函数 创建 create function fu_ ...

  8. Oracle 与Sql Server常用函数对比

    来自:http://topic.csdn.net/u/20080704/08/b2b8c42f-b0d6-4cda-98b1-6e4a279b4ff8.html 感谢楼主 函数 SQLServer和O ...

  9. SQL Server 自定义函数(Function)——参数默认值

    sql server 自定义函数分为三种类型:标量函数(Scalar Function).内嵌表值函数(Inline Function).多声明表值函数(Multi-Statement Functio ...

随机推荐

  1. HDU 4043 FXTZ II (组合数学-排列组合)

    FXTZ II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  2. index merge的一次优化

    手机微博4040端口SQL优化 现象 某端口常态化延迟,通过使用pt-query-digest发现主要由于一条count(*)语句引发,具体如下: # .5s .58M rss, .84M vsz # ...

  3. js 操作select和option

    js 操作select和option 1.动态创建select function createSelect(){ var mySelect = document.createElement_x(&qu ...

  4. 一个fork的面试题

    前两天有人问了个关于Unix的fork()系统调用的面试题,这个题正好是我大约十年前找工作时某公司问我的一个题,我觉得比较有趣,写篇文章与大家分享一下.这个题是这样的: 题目:请问下面的程序一共输出多 ...

  5. Python 基本类型转换

    python 有关字符串处理有哪些好用的方法?reverse len 字符串分割,合并?截取?查找? find index join split unicode字符串的表示 ""& ...

  6. gnuplot Python API

    源文件 #!/usr/bin/env python from os import popen class gnuplot_leon: # Author : Leon Email: yangli0534 ...

  7. POJ 2823 Sliding Window 再探单调队列

    重新刷这个经典题,感觉跟以前不一样了,变得更加容易理解了,不讲解了,看代码.注意:要用C++提交,用G++会超时.. 代码: #include <iostream> #include &l ...

  8. sql 入门经典(第五版) Ryan Stephens 学习笔记  第四部分:建立复杂的数据库查询/

    第十三章: 在查询表里结合表 1.等值结合 : // 选择 tabla_a 和table_b 中id相等的行,输出 他们的id 和name select table_a.id , table_a.na ...

  9. SpringMVC 通过post接收form参数或者json参数

    springmvc的controller很多都用来提供restful服务,成为多功能action 同一个接口既能够提供给web端,也可以提供给ios以及安卓 @RequestBody 可以把接收到的j ...

  10. AC日记——无线网络发射器选址 洛谷 P2038

    题目描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129 条东西向街道和129 条南北向街道所形成的网格状,并且相邻 ...