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]
字符串函数用于控制返回给用户的字符串,这些功能仅用于字符型数据。如下表所示,列出了部分常用的字符串函数。
字符串在信息处理时有特殊的地位,几乎所有信息都需要转换成字符串才能正确显示,尤其是不同数据拼接起来显示的使用更加广泛。
字符串拼接起来和简单,两个字符串之间使用“+”即可。
案例需求:查询用户13701418965在未缴费的市话账单信息。如下图所示:
说明如下:[/b]
字符串拼接时,需要在两个字符串之间使用“+”
从待缴费账单表里accountbill,查询未缴费ispaid=0的账单信息
使用字符串拼接,将电话号码字段+’市话费用’+费用字段转换字符串
为了实现这项功能,可以通过以下SQL语句。
注:cast函数主要是为了将数值型字段转换成字符型字段
2.[/b]日期函数[/b][/b]
在SQL server中不能直接对日期运用数学函数,需要使用日期函数用于操作日期值。例如,如果执行一个诸如“当日期+1”的语句,SQL server无法理解要增加的是一日、一月还是一年。
[/b]日期函数帮助提起日期值中的日、月以及年,以便分别操作它们,如下表所示,列出了部分的常用日期函数。[/b][/b]
案例需求:显示用户13701418965的2008年6月份的通话记录的通话时长
[b]实施说明:
使用Datediff函数求开始时间与结束时间之间差值,精确到分钟。
为了实现这个功能,可以通过以下[/b]SQL[/b]语句来实现:[/b][/b]
[/b]
注意点:在输入代码的时候,要注意输入法的问题,一定要保持英文输入法状态,否则会报错书写时一定要遵守规则. YYYY-MM-DD HH:MM:SS分别代表年—月—日 小时:分钟:秒.书写时一定要严格遵守格式
3.数学函数
数学函数用于对数值进行代数运算,由于数据函数数量众多,不可能全部列举 .如下表所示,列出了SQL server中常用的数学函数。
案例需求:显示用户13701418965的2008年6月份的通话记录的通话时长(通话时长精确到分钟,不到一分钟的按一分钟计算.)
说明:
使用使用Datediff函数求开始时间与结束时间之间差值,精确到秒。
将通话时长除以60秒,使用ceiling函数,取通话时长除以60结果的上限整数值。
实现语句
注意事项[/b]:[/b]上面所有这些函数,可以在T-SQL中混合使用,得到符合特殊要求的查询输出。使用convert和cast类型转换使用频繁,在很多场合使用。尤其是在网站应用中,常常需要将各种类型的数据转换成指定格式的字符串,然后拼接成显示内容。
4.[/b]系统函数[/b][/b]
系统函数用来获取有关SQL server中对象和设置的系统信息,如下表所示,列出了经常使用的一些系统函数。
注意事项:上面所有这些函数,可以在T-SQL中混合使用,得到符合特殊要求的查询输出。使用convert和cast类型转换使用频繁,在很多场合使用。尤其是在网站应用中,常常需要将各种类型的数据转换成指定格式的字符串,然后拼接成显示内容。
案例需求:查询用户的欠费账单记录,要求并显示用户号码和欠费信息。
实施说明:
查询过程是在accountbill表里查询ispaid=0表示未缴费的账单,calltype=0市话,calltype=1长话,charge金额,accounttime为账单时间。
实现语句
显示用户13701418965欠费账单中的市话费用
显示用户13701418965欠费账单中的长话费用
本文出自 “乐成的技术笔记” 博客,谢绝转载!
根据用途,把函数分为四类,分别是字符串函数、日期函数、数学函数、系统函数。[/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] |
[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] |
说明:
使用使用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” |
案例需求:查询用户的欠费账单记录,要求并显示用户号码和欠费信息。
实施说明:
查询过程是在accountbill表里查询ispaid=0表示未缴费的账单,calltype=0市话,calltype=1长话,charge金额,accounttime为账单时间。
实现语句
显示用户13701418965欠费账单中的市话费用
显示用户13701418965欠费账单中的长话费用
本文出自 “乐成的技术笔记” 博客,谢绝转载!
相关文章推荐
- T-SQL的高级查询详解(一)--函数的综合应用
- Oracle数据库之SQL(高级查询)详解
- 高级sql学习——null详解,字符格式详解,随机值查询!!!
- T-SQL的高级查询详解--分组查询
- T-SQL的高级查询详解--聚合函数
- T-SQL的高级查询详解--分组查询
- mysql笔记3 - 高级SQL查询(主键,外键,嵌套)
- SQL Server T-SQL高级查询
- Oracle中的SQL分页查询原理和方法详解 (转)
- SQL-Server中数据检索(高级查询)
- SQL SERVER T-SQL编程与高级查询
- SQL查询语句使用详解
- SQL Server T-SQL高级查询
- MySQL高级查询——连接(join)查询实例详解
- SQL语句面试题目:一般查询和高级子查询
- SQL Server T-SQL高级查询
- ORACLE sql 高级查询
- SQL Server T-SQL高级查询
- SQL Server T-SQL高级查询
- ORACLE Unit04 SQL(高级查询)