在前面,我们已经学习了一些简单的增、删、改、查询的语句,但是为了更方便快捷的完成大量的任务,SQL server提供了一些内部函数,可以和SQL server的select语句联合使用,也可以和update与insert一起使用,可以进行类型转换、日期处理、数学计算,实现系统功能。
根据用途,把函数分为四类,分别是字符串函数、日期函数、数学函数、系统函数。
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,' 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
|
案例需求:显示用户13701418965的2008年6月份的通话记录的通话时长
实施说明:
使用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
|
案例需求:显示用户13701418965的2008年6月份的通话记录的通话时长(通话时长精确到分钟,不到一分钟的按一分钟计算.)
说明:
使用使用Datediff函数求开始时间与结束时间之间差值,精确到秒。
将通话时长除以60秒,使用ceiling函数,取通话时长除以60结果的上限整数值。
实现语句
注意事项:上面所有这些函数,可以在T-SQL中混合使用,得到符合特殊要求的查询输出。使用convert和cast类型转换使用频繁,在很多场合使用。尤其是在网站应用中,常常需要将各种类型的数据转换成指定格式的字符串,然后拼接成显示内容。
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中混合使用,得到符合特殊要求的查询输出。使用convert和cast类型转换使用频繁,在很多场合使用。尤其是在网站应用中,常常需要将各种类型的数据转换成指定格式的字符串,然后拼接成显示内容。
案例需求:查询用户的欠费账单记录,要求并显示用户号码和欠费信息。
实施说明:
查询过程是在accountbill表里查询ispaid=0表示未缴费的账单,calltype=0市话,calltype=1长话,charge金额,accounttime为账单时间。
实现语句
显示用户13701418965欠费账单中的市话费用
显示用户13701418965欠费账单中的长话费用