做一个项目的时候经常会遇到各种各样的时间问题需要处理,有些函数经常会忘记,翻阅一些资料,加上自己的需求,简单的总结记忆一下基础知识,方便以后使用
一.convert函数
简单用法:
- 查询某天的数据
- 非:PublishTime=@PublishTime
- 而应:select * from Meeting where convert(varchar(10),PublishTime,121))=@PublishTime
分析:比如为@PubilishTime提供参数‘2011-04-18’,经过抓花之后,实际上相当于查询PubilishTime=2011-04-18 00:00:00 ,从而不会得出真实的当天数据。
注:convert一般用的也比较少,因为一般的时候时间列都建立有非聚集索引,convert函数会使数据库认为放弃按照时间索引的方式进行数据查询,在一些数据量非常大的数据表里,这种查询是非常影响性能的。
时间的一些转换格式:
- select Convert(varchar(10),getdate(),120)
- 2011-05-12
- select CONVERT(varchar, getdate(), 120 )
- 2011-05-12 11:06:08
- select replace(replace(replace(CONVERT(varchar, getdate(),
- select CONVERT(varchar(12) , getdate(), 111 )
- 2011/05/12
- select CONVERT(varchar(12) , getdate(), 112 )
- 20110512
- select CONVERT(varchar(12) , getdate(), 102 )
- 2011.05.12
- select CONVERT(varchar(12) , getdate(), 103 )
- 12/09/2004
- select CONVERT(varchar(12) , getdate(), 104 )
- 12.05.2011
- select CONVERT(varchar(12) , getdate(), 105 )
- 12-05-2011
- select CONVERT(varchar(12) , getdate(), 106 )
- 12 05 2011
- select CONVERT(varchar(12) , getdate(), 108 )
- 11:06:08
- select CONVERT(varchar(12) , getdate(), 110 )
- 09-12-2011
二。简单一些函数
(1)查询年.月.日
- select year(getdate())--年
- select month(getdate())--月
- select day(getdate())--日
(2)查询每周的数据
- SELECT * FROM HW_SRDH WHERE datediff(week,SRSJ,getdate())=0 --本周数据
- SELECT * FROM HW_SRDH WHERE datediff(week,SRSJ,getdate())=1 --上周数据
(3)日期加法
- select dateadd(month,2,getdate()) --加两月
- select dateadd(day,2,getdate()) --加两天
(4)查询两端日期之间的天数
- select datediff(day,'2011-09-01','2011-09-18')
(5)得到一个日期的年份
- SELECT DATEPART(year, '2004-10-15')
(6)返回平年还是闰年
- SELECT
- case
- day(dateadd(mm, 2, dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))))
- when 28
- then '平年'
- else '闰年'
- end
(7)返回指定日期是星期几。
- SELECT datename(weekday, getdate())
(8)返回当前日期是当年第多少周
- select 本年第多少周=datename(week, getdate())
(9)
- --1.一个月第一天的
- SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
- --2.本周的星期一
- SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
- select dateadd(wk,datediff(wk,0,getdate()),6)
- --3.一年的第一天
- SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
- --4.季度的第一天
- SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)