SQL语句之语法汇总(三)(一)

2014-11-24 11:10:01 · 作者: · 浏览: 0

相关链接:
SQL语句之语法汇总(一)
http://www.2cto.com/database/201206/135900.html;
SQL语句之语法汇总(二)
http://www.2cto.com/database/201206/135910.html
SQL语句之语法汇总(三)
重点介绍数字函数、字符串函数、日期函数、类型转换函数cast /convert、表连接join等基础,并详细讲述一个综合练习,以巩固所学到的sql知识。
  例子或代码中用到的table,若涉及到 汇总(二)的表,如有需要请查阅 汇总(二)!
一. 数字函数
  1.1 代码
www.2cto.com
--绝对值:3.1415,3.1415
select abs(3.1415);
select abs(-3.1415);
--舍入到最大整数:4,4,-3,-3
select ceiling(3.2);
select ceiling(3.7);
select ceiling(-3.2);
select ceiling(-3.7);
--舍入到最小整数:3,3,-4,-4
select floor(3.2);
select floor(3.7);
select floor(-3.2);
select floor(-3.7);
--四舍五入到“离半径最近的数”、后面的3即保留三位小数:3.1410,3.1420,-3.1410,-3.1420
select round(3.1413,3);
select round(3.1418,3);
select round(-3.1413,3);
select round(-3.1418,3);
二. 字符串函数
  2.1 代码
select len('abcd'); --字符串长度:4
select lower('abcdEMN'); --转小写
select upper('abcdEMN');    --转大写
select ltrim(' ss ');   --去左空格
select rtrim(' ss '); --去右空格
select rtrim(ltrim(' ss '));  --去左右空格
select substring('abcdef',3,3); --结果:cde;格式:substring(string,startIndex,length)
  2.2 分析
  substring(string,startIndex,length),startIndex为子字符串在住字符串中的起始位置,length为子字符串的最大长度
三.日期函数
  3.1代码
www.2cto.com
--当前时间
select getdate();
--分别获取年/月/日
select DatePart(year,getdate()),DatePart(month,getdate()),DatePart(day,getdate());
--在当前日期运算。格式:DateAdd(datePart,number,date);注:可用hh,dd,mm,yy表示hour/day/month/year
select DateAdd(hour,3,getdate()); --加三小时hour
select DateAdd(day,3,getdate());   --三天day
select DateAdd(month,3,getdate());  --三月month
select DateAdd(year,3,getdate());   --三年year
--日期差值 格式:DateDiff(datePart,startDate,endDate);
select DateDiff(hh,getdate(),DateAdd(dd,3,getdate()));
  3.2 分析
  参考下面的例子
1)员工入职年限表
select FName, FInDate as 入职日期,DateDiff(year,FInDate,getdate()) as 入职年限 from T_Employee;
2)入职n年的人数统计表(FInDate为入职时间)
select DateDiff(year,FInDate,getdate()) as 入职年限, count(*) as 入职人员数 from T_Employee
group by DateDiff(year,FInDate,getdate())
3)每年入职人数统计表
select DatePart(year,FInDate),count(*) from T_Employee
group by DatePart(year,FInDate)
四. 类型转换
  4.1代码
1) 类型转换两种方式:
select cast('123'as int);
select cast('2008-08-08' as datetime);
select convert(datetime,'2009-09-09');
select convert(varchar(50),123);
2)注意:
select '123'+1; --不好!有时会报错
select cast('123' as int)+1; --最好转化为同一类型再运算
select DatePart(year,'2008-8-8') --不好!有时会报错
select DatePart(year,cast('2008-8-8' as datetime)) --最好转化为同一类型再运算
4.2分析
  注意使用cast、convert时候,需要考虑转换前后类型是否可以匹配,如要select cast('aaa'as int)是肯定会报错的
  在"2)"中说到的情况还是应该注意,有些时候会出现错误!!!
五.case语句
  5.1代码:
www.2cto.com
--case函数:实现离散值的判断
select FName,
(
case FLevel         --加上'判断值'
when 1 then'普通客户'
when 2 then'会员'
when 3 then 'VIP'
else '未知客户关系'
end
)as 客户类型
from T_Customer
--case函数:实现值域的判断
select FName,FSalary,
(
case        --不写'判断值'
when FSalary<2000 then '低收入'
when FSalary>=2000 and FSalary <5000 then '中收入'
else '高收入'
end
)as 收入水平
from T_Employee
  5.2 分析
  1).上面方式分别针对离散值判断、值域判断;继续参考下面的小例子
  2).有一张表