容易遗忘的SQL
1:时间函数:
知识点:DATEDIFF() 函数返回两个日期之间的天数,DATEDIFF(datepart,startdate,enddate),startdate 和 enddate 参数是合法的日期表达式。
datepart 是将为其返回 integer 的 date(日期或时间值)的一部分.比如年、月、日、小时、分钟等等。
查询入职的年数
select FName,FIndate,DateDiff(year,FinDate(入职时间字段),Getdate()) from T
取出每年入职的员工个数 按照入职的年数分组然后在输出个数:
第一种写法:
select datediff(year,FInDate,Getdate()),count(*) from T group by datediff(year,FInDate,Getdate())
第二种写法:
select datepart(year,FIndate),count(*) from T group by datepart(year,FIndate)取出某一部分
2:group by语句:
按照年龄相同的数据分一组
select count(*) from T gorup by age
取出工资大于2000的人员然后按照年龄分组
select Fage,Count(*) from T where Sale>2000 group by Fage
注意事项:没有出现在group by子句中的列不能放到select语句后的列名列表中(聚合函数除
外))gorup by字句必须放到where语句的之后 having是对分组后信息的过滤,能用的列和select中能用的列一样
3:ISNULL用法:
ISNULL(expression,value)如果expression不为空则返回expression,否则返回value
4:case when then:
三种实现方法
4.1:标量值函数
select dbo.rt(sex) from test1createfunction rt ( @part int ) returns varchar(10) as begin if @part=1 return '普通客户' if @part=2 return 'VIP' if @part=3 return 'Custom' return '' end
4.2:最普通的CASE WHEN THEN(产生新列)
select name,(case sex when 1 then '普通客户' when 2 then 'a' else 'b' end) as '客服类型' from test1
4.3:支持范围查询的CASE WHEN THEN(产生新列)
select name,(case when sex=1 //支持范围值 then '普通客户' when sex=2 then 'a' else 'b' end) as '客服类型' from test1
4.4例子:
表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列
select (case when A>B then A else B end),(case when B>C then B else C end) from T