在前面,我们已经学习了一些简单的增、删、改、查询的语句,但是为了更方便快捷的完成大量的任务,SQL server提供了一些内部函数,可以和SQL serverselect语句联合使用,也可以和updateinsert一起使用,可以进行类型转换、日期处理、数学计算,实现系统功能。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

根据用途,把函数分为四类,分别是字符串函数、日期函数、数学函数、系统函数。

1.字符串函数

字符串函数用于控制返回给用户的字符串,这些功能仅用于字符型数据。如下表所示,列出了部分常用的字符串函数。
函 数 名

描  述

举  例

CharIndex

用来寻找一个指定的字符串在另一个字符串中的起始位置

SELECT CHARINDEX(‘Benet',‘My  Benet Course',1 )

返回:4

Len

返回传递给它的字符串长

SELECT LEN('SQL Server课程')

返回:12

Ltrim

清除字符左边的空格

SELECT LTRIM ('  周智宇  ')

返回:周智宇  (后面的空格保留)

Rtrim

清除字符右边的空格

SELECT RTRIM ('  周智宇  ')

返回:  周智宇(前面的空格保留)

Right

从字符串右边返回指定数目的字符

SELECT RIGHT('买卖提.吐尔松',3)

返回:吐尔松

Replace

替换一个字符串中的字符

SELECT REPLACE('莫乐可切.杨可','','')

返回:莫乐兰切.杨兰

字符串在信息处理时有特殊的地位,几乎所有信息都需要转换成字符串才能正确显示,尤其是不同数据拼接起来显示的使用更加广泛。
   字符串拼接起来和简单,两个字符串之间使用“+”即可。
案例需求:查询用户13701418965在未缴费的市话账单信息。如下图所示:

说明如下:

字符串拼接时,需要在两个字符串之间使用“+”

从待缴费账单表里accountbill,查询未缴费ispaid=0的账单信息

使用字符串拼接,将电话号码字段+’市话费用’+费用字段转换字符串

为了实现这项功能,可以通过以下SQL语句。

注:cast函数主要是为了将数值型字段转换成字符型字段

2.日期函数

SQL server中不能直接对日期运用数学函数,需要使用日期函数用于操作日期值。例如,如果执行一个诸如“当日期+1”的语句,SQL server无法理解要增加的是一日、一月还是一年。

      日期函数帮助提起日期值中的日、月以及年,以便分别操作它们,如下表所示,列出了部分的常用日期函数。

函 数 名

描  述

举  例

GetDate

取得当前的系统日期

SELECT GETDATE()

返回:今天的日期

DateAdd

将指定的数值添加到指定的日期部分后的日期

SELECT DATEADD(mm,4,'<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />01/01/1999')

返回:以当前的日期格式返回05/01/1999

DateDiff

两个日期之间的指定日期部分的区别

SELECT  DATEDIFF(mm,'01/01/1999', '05/01/1999')

返回:4

DateName

日期中指定日期部分的字符串形式

SELECT DATENAME(dw, '01/01/2000')

返回:Saturday

DatePart

日期中指定日期部分的整数形式

SELECT DATEPART(day, '01/15/2000')

返回:15

案例需求:显示用户1370141896520086月份的通话记录的通话时长

实施说明:

使用Datediff函数求开始时间与结束时间之间差值,精确到分钟。

为了实现这个功能,可以通过以下SQL语句来实现:

 

注意点:在输入代码的时候,要注意输入法的问题,一定要保持英文输入法状态,否则会报错书写时一定要遵守规则. YYYY-MM-DD HH:MM:SS分别代表年 小时:分钟:.书写时一定要严格遵守格式

3.数学函数

数学函数用于对数值进行代数运算,由于数据函数数量众多,不可能全部列举 .如下表所示,列出了SQL server中常用的数学函数。

函 数 名

描  述

举  例

Abs

取数值表达式的绝对值

SELECT ABS(-43)

返回:43

Ceiling

取大于或等于指定数值、表达式的最小整数

SELECT CEILING(43.5)

返回:44

Floor

取小于或等于指定表达式的最大整数

SELECT FLOOR(43.5)

返回:43

函 数 名

描  述

举  例

Power

取数值表达式的幂值

SELECT POWER(5,2)

返回:25

Round

将数值表达式四舍五入为指定精度

SELECT ROUND(43.543,1)

返回:43.5

Sign

对于正数返回+1,对于负数返回-1,对于0则返回0

SELECT SIGN(-43)

返回:-1

Sqrt

取浮点表达式的平方根

SELECT SQRT(9)

返回:3

案例需求:显示用户1370141896520086月份的通话记录的通话时长(通话时长精确到分钟,不到一分钟的按一分钟计算.)

说明:

使用使用Datediff函数求开始时间与结束时间之间差值,精确到秒。

将通话时长除以60秒,使用ceiling函数,取通话时长除以60结果的上限整数值。

实现语句

注意事项:上面所有这些函数,可以在T-SQL中混合使用,得到符合特殊要求的查询输出。使用convertcast类型转换使用频繁,在很多场合使用。尤其是在网站应用中,常常需要将各种类型的数据转换成指定格式的字符串,然后拼接成显示内容。

4.系统函数

     系统函数用来获取有关SQL server中对象和设置的系统信息,如下表所示,列出了经常使用的一些系统函数。
函 数 名

描  述

举  例

Convert

数据类型转换

SELECT CONVERT (VARCHAR (5),12345)

返回:字符串12345

Cast

数据类型转换,与convert相比语法较简单,转换功能也少

例如,将字符串转换日期格式,cast(‘2009-03-17’ as datetime)

Current_User

返回当前用户的名字

SELECT CURRENT_USER

返回:你登录的用户名

DataLength

返回用于指定表达式的

字节数

SELECT DATALENGTH ('中国A联盟')

返回:5

Host_Name

返回当前用户所登录的计算机名字

SELECT HOST_NAME()

返回:你所登录的计算机的名字

System_User

返回当前所登录的用户

名称

SELECT SYSTEM_USER

返回:你当前所登录的用户名

User_Name

从给定的用户ID返回用户名

SELECT USER_NAME(1)

返回:从任意数据库中返回”dbo”

注意事项:上面所有这些函数,可以在T-SQL中混合使用,得到符合特殊要求的查询输出。使用convertcast类型转换使用频繁,在很多场合使用。尤其是在网站应用中,常常需要将各种类型的数据转换成指定格式的字符串,然后拼接成显示内容。

案例需求:查询用户的欠费账单记录,要求并显示用户号码和欠费信息。

实施说明:

查询过程是在accountbill表里查询ispaid=0表示未缴费的账单,calltype=0市话,calltype=1长话,charge金额,accounttime为账单时间。

实现语句

显示用户13701418965欠费账单中的市话费用

显示用户13701418965欠费账单中的长话费用