您的位置:首页 > 数据库

T-SQL的高级查询详解(一)

2010-05-02 14:27 253 查看
在前面,我们已经学习了一些简单的增、删、改、查询的语句,但是为了更方便快捷的完成大量的任务,SQL server[/b]提供了一些内部函数,可以和SQL server[/b]的select[/b]语句联合使用,也可以和update[/b]与insert[/b]一起使用,可以进行类型转换、日期处理、数学计算,实现系统功能。[/b]
根据用途,把函数分为四类,分别是字符串函数、日期函数、数学函数、系统函数。[/b]
1.[/b]字符串函数[/b]
字符串函数用于控制返回给用户的字符串,这些功能仅用于字符型数据。如下表所示,列出了部分常用的字符串函数。

函 数 名描  述举  例
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在未缴费的市话账单信息。如下图所示:



说明如下:[/b]
字符串拼接时,需要在两个字符串之间使用“+”
从待缴费账单表里accountbill,查询未缴费ispaid=0的账单信息
使用字符串拼接,将电话号码字段+’市话费用’+费用字段转换字符串
为了实现这项功能,可以通过以下SQL语句。



注:cast函数主要是为了将数值型字段转换成字符型字段
2.[/b]日期函数[/b][/b]
SQL server中不能直接对日期运用数学函数,需要使用日期函数用于操作日期值。例如,如果执行一个诸如“当日期+1”的语句,SQL server无法理解要增加的是一日、一月还是一年。
[/b]日期函数帮助提起日期值中的日、月以及年,以便分别操作它们,如下表所示,列出了部分的常用日期函数。[/b][/b]

函 数 名[/b]描  述[/b]举  例[/b]
GetDate[/b]取得当前的系统日期[/b]SELECT GETDATE()
返回:今天的日期[/b]
DateAdd[/b]将指定的数值添加到指定的日期部分后的日期[/b]SELECT DATEADD(mm,4,'01/01/1999')
返回:以当前的日期格式返回05/01/1999[/b]
DateDiff[/b]两个日期之间的指定日期部分的区别[/b]SELECT DATEDIFF(mm,'01/01/1999', '05/01/1999')
返回:4[/b]
DateName[/b]日期中指定日期部分的字符串形式[/b]SELECT DATENAME(dw, '01/01/2000')
返回:Saturday[/b]
DatePart[/b]日期中指定日期部分的整数形式[/b]SELECT DATEPART(day, '01/15/2000')
返回:15[/b]
案例需求:显示用户1370141896520086月份的通话记录的通话时长



[b]实施说明:

使用Datediff函数求开始时间与结束时间之间差值,精确到分钟。
为了实现这个功能,可以通过以下[/b]SQL[/b]语句来实现:[/b][/b]

[/b]


注意点:在输入代码的时候,要注意输入法的问题,一定要保持英文输入法状态,否则会报错书写时一定要遵守规则. YYYY-MM-DD HH:MM:SS分别代表年—月—日 小时:分钟:秒.书写时一定要严格遵守格式
3.数学函数
数学函数用于对数值进行代数运算,由于数据函数数量众多,不可能全部列举 .如下表所示,列出了SQL server中常用的数学函数。

函 数 名[/b]描  述[/b]举  例[/b]
Abs[/b]取数值表达式的绝对值[/b]SELECT ABS(-43)
返回:43[/b]
Ceiling[/b]取大于或等于指定数值、表达式的最小整数[/b]SELECT CEILING(43.5)
返回:44[/b]
Floor[/b]取小于或等于指定表达式的最大整数[/b]SELECT FLOOR(43.5)
返回:43[/b]
函 数 名[/b]描  述[/b]举  例[/b]
Power[/b]取数值表达式的幂值[/b]SELECT POWER(5,2)
返回:25[/b]
Round[/b]将数值表达式四舍五入为指定精度[/b]SELECT ROUND(43.543,1)
返回:43.5[/b]
Sign[/b]对于正数返回+1,对于负数返回-1,对于0则返回0[/b]SELECT SIGN(-43)
返回:-1[/b]
Sqrt[/b]取浮点表达式的平方根[/b]SELECT SQRT(9)
返回:3[/b]
案例需求:显示用户1370141896520086月份的通话记录的通话时长(通话时长精确到分钟,不到一分钟的按一分钟计算.)



说明:
使用使用Datediff函数求开始时间与结束时间之间差值,精确到秒。
将通话时长除以60秒,使用ceiling函数,取通话时长除以60结果的上限整数值。
实现语句



注意事项[/b]:[/b]上面所有这些函数,可以在T-SQL中混合使用,得到符合特殊要求的查询输出。使用convert和cast类型转换使用频繁,在很多场合使用。尤其是在网站应用中,常常需要将各种类型的数据转换成指定格式的字符串,然后拼接成显示内容。
4.[/b]系统函数[/b][/b]
系统函数用来获取有关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欠费账单中的长话费用




本文出自 “乐成的技术笔记” 博客,谢绝转载!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: