日期查询函数
函数 | 功能 |
---|---|
getdate() | 返回系统当前的日期和时间 |
DateDiff(interval,date1,date2) | 以interval指定的格式,返回date2与date1之间的差值 |
DateAdd(interval,number,date) | 以interval指定的格式,date加上number之后的日期 |
DatePart(interval,date) | 返回日期date中,interval指定部分所对应的整数值 |
DateName(interval,date) | 返回日期date中,interval指定部分所对应的字符串名称 |
CONVERT(数据类型,字段,格式) | 将日期格式化 |
举例
SELECT GETDATE() → 2021-06-27 21:20:02.053
SELECT DATEDIFF(mi, '2021-06-20 08:00:00', '2021-6-25 22:56:32') → 8096
SELECT DATEADD(yy, 3, '2021-6-25 22:56:32') → 2024-06-25 22:56:32.000
SELECT DATEPART(ww, '2021-6-25 22:56:32') → 26
SELECT DATENAME(dd, '2021-6-25 22:56:32') → 25
SELECT CONVERT(VARCHAR(20),GETDATE(),20) → 2021-06-27 21:30:58
参数interval
值 | 缩写 | Access和ASP | 说明 |
---|---|---|---|
year | yy | yyyy | 年1753~2021 |
quarter | q | 季1~4 | |
month | mm | m | 月1~12 |
day of year | dy | y | 一年中的第几天1~365 |
day | dd | d | 日1~31 |
weekday | dw | w | 一周的第几日1~7 |
week | wk | ww | 一年中的第几周0~51 |
hour | hh | h | 时0~23 |
minute | mi | n | 分钟0~59 |
second | ss | s | 秒0~59 |
millsecond | ms | - | 毫秒0~999 |
日期查询
单个时间点查询
年
SELECT DATENAME(yy, GETDATE()) → 2021
月
SELECT DATENAME(mm, GETDATE())
日
SELECT DATENAME(dd, GETDATE())
周
SELECT DATENAME(wk, GETDATE())
时
SELECT DATENAME(hh, GETDATE())
分
SELECT DATENAME(mi, GETDATE())
秒
SELECT DATENAME(ss, GETDATE())
昨日8点
SELECT CONVERT(VARCHAR(10),DATEADD(hh,-24,GETDATE()),23)+' 08:00:00' → 2021-06-27 08:00:00
SELECT CONVERT(VARCHAR(10),DATEADD(dd,-1,GETDATE()),23)+' 08:00:00'
今日8点
SELECT CONVERT(VARCHAR(10),DATEADD(dd,0,GETDATE()),23)+' 08:00:00'
第一天查询
date字段取0表示“1900-01-01 00:00:00.000”
查询第一天就是先用DateDiff函数将日期和0作比较得到差值,然后用DateAdd函数加上差值计算第一天
每年的第一天
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) → 2021-01-01 00:00:00.000
每季度的第一天
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
每月的第一天
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
每周的第一天
SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
本月的第一个星期一
SELECT DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0)
最后一天查询
以本年最后一天为例,首先计算今天距1900年差值+1 【122】,然后获取明年的第一天【2022-01-01 00:00:00.000】,最后通过毫秒-3获取本年的最后一天【2021-12-31 23:59:59.996】
本年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0)) ➡️ 2021-12-31 23:59:59.996
本月最后一天
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))
上月的最后一天
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
上年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
按日期统计
今日所有数据:查询【datetime字段类型】到【getdate()】相差天数为0的所有数据
今天的所有数据
select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=0
昨天的所有数据
select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=1
7天内的所有数据
select * from 表名 where DateDiff(dd,datetime类型字段,getdate())<=7
30天内的所有数据
select * from 表名 where DateDiff(dd,datetime类型字段,getdate())<=30
本月的所有数据
select * from 表名 where DateDiff(mm,datetime类型字段,getdate())=0
本年的所有数据
select * from 表名 where DateDiff(yy,datetime类型字段,getdate())=0