日期/case函数用法

来源:互联网 发布:床垫哪个好 知乎 编辑:程序博客网 时间:2024/06/06 02:45

create table TestDatetime
(
autoId int identity(1,1) primary key,
Uname varchar(50),
Ubithday datetime,
)

select * from TestDatetime
insert into TestDatetime(uname)values('张三')

getdate()获取当前日期
1、设置默认值为当前日期
2、使用getdate()方法获得当前日期
select getdate()
print getdate()--以消息的形式输出
print convert(varchar(50),getdate(),105)
3、dateadd
--算出200天以后,病毒发作的日期
pint convert(varchar(50),dateadd(day,200,getdate()),111)
--入职时间大于一年,使用getdate 和dateadd
入职日期+1年还<当期日期
2003+1=2004<2012

select * from Employees
where dateadd(year,1,EmpInTime)<getdate()
--给如日期超过1年的员工加薪1000
update Employees set EmpSalary=EmpSalary+1000
where dataadd(year,1,EmpInTime)<getdate()
--1983年11月22日与现在getdate()相差多少年?datadiff()
print datadiff(year,'1983-11-22',getdate())
print datadiff(month,'1983-11-22',getdate())
print datadiff(hour,'1983-11-22',getdate())
print datadiff(minute,'1983-11-22',getdate())
--获取日期的一部分year() day(),month()
ptint year(getdate())
ptint month(getdate())
ptint day(getdate())
print datepart(hour,getdate())
print datepart(minute,getdate())
print datepart(second,getdate())
print datepart(ms,getdate())
每年入职的人数
select
year(EmpInTime) as 入职年份,
人数=count(*)
from Employees
group by year(EmpInTime)
--统计1991年出生的学生
select * from MyStudets
where year(FBirthday)='1991'

-1-输出所有数据中通话时间最长的5条记录
select top 5* ,
通话时长=datediff(second,StartDateTime,EndDateTime)
from CallRecords
order by 通话时长 desc,CallerNumber asc
-2-输出所有数据中拨打长途号码(对方号码以0开头)的总时长
select
sum(datediff(second,StartDateTime,EndDateTime)) as 通话总时长
from CallRecords
where TelNum like‘0%’
-3-输出本月通话总时长最多的前三个呼叫员的编号。
select top 3
CallerNumber,
sum(datediff(second,StartDateTime,EndDateTime)) as 总通话时长
from CallRecords
where datadiff(month,getdate(),startdatetime)=0--避免不同年的bug
group by CallerNumber
order by 呼叫次数 desc

-4-输出本月拨打电话次数最多的前三个呼叫员的编号.group by,count(*)
select top 3
CallerNumber as 呼叫员编号,
count(*) 呼叫次数
from CallRecords
where datediff(month,StartDateTae)=datepart(month,getdate())
--where month(StartDateTae)=moth(getdate())
group by CallerNumber
order by 呼叫次数 desc
-5-按月份分组
select datediff(month,StartDateTime,getdate())
from CallRecords
group by datediff(month,StartDateTime,getdate())
--------------------------------------------------------------------
case函数用法
--if。。。else对一个范围的判断
select
scoreId,
studentId,
english,
评级=
case
  when english>=90 then '优秀'
  when english>=80 then '良好'
  when english>=70 then '中等'
  when english>=60 then '及格'
else '不及格'
end
from Score
--swith..case只对离散的值进行判断
select
scoreId,
studentId,
english,
等级=
case english
  when 100 then '百分'
  when 95 then '九十五'
else
 '小于九十分'
end
from Score

--有一个表中有A,B两列,现在要求查询结果集中包含ABC三列
create table TesCase
(
A int,
B int
)

select * from TestCase
insert into TestCase values(10,20)
insert into TestCase values(100,32)


select
A ,
B,
C=
 case
    when A>=B then A
    else B
end
from TestCase
--在
USE Test
select * from MyOrders

select
salesAssistant as 销售员,
sum(saveNumber*savePrice)as 销售总金额,
称号=
case
 when sum(saveNumber*savePrice)>6000 then '金牌'
 when sum(saveNumber*savePrice)>5500 then '银牌'
 when sum(saveNumber*savePrice)>4500 then '铜牌'
else '普通'
end
from MyOrders
group by salesAssistant
order by 销售总金额 desc

--------------------------------------------
索引
1.什么是索引?
索引就是目录
2.分类
 (1)聚集索引:数据的实际存储顺序与索引的一致
 (2)非聚集索引:数据的实际存储顺序与索引不一致

创建索引:
右击表——单击数据类型——索引

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击