容易遗忘のSQL

1:时间函数:

知识点:DATEDIFF() 函数返回两个日期之间的天数,DATEDIFF(datepart,startdate,enddate),startdateenddate 参数是合法的日期表达式。

           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)取出某一部分

 求相差时间的日期

select dateadd(dd,1,getdate()) 

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 test1
createfunction 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



原文地址:https://www.cnblogs.com/monian/p/2278141.html