sql 日期和当前日期时间差_SQL基础进阶16日期处理

本文介绍了SQL中处理日期的常见方法,包括获取系统当前日期、使用datepart和datename函数、dateadd和datediff进行日期加减,以及day(), month(), year()等函数的使用。示例展示了如何获取当前日期、月份、本周一、本年第一天等特殊日期,并计算日期间的差值。" 114330286,10543697,MySQL to TiDB 实时同步配置指南,"['数据库迁移', '数据同步', 'MySQL', 'TiDB', 'syncer']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本节知识点

常见日期场景的处理 

1、系统当前日期

select  getdate()  as  当前系统日期

39a0ffcad66a0035bbecd0ca950f6511.png

--建表时,设置日期字段默认值为系统当前日期

create  table  test5

(

fid  int  identity(1, 1),

fname  varchar(50),

fdate  datetime  default(getdate())

)

insert  into  test5(fname)

select  '测试一'

union  all  select  '测试二'

select  *  from  test5

c227f731ca593962aa35940a1e5077dc.png

2、日期函数

函数

参数/功能

GetDate( )

返回系统目前的日期与时间

DateDiff (interval,date1,date2)

以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1

DateAdd (interval,number,date)

以interval指定的方式,加上number之后的日期

DatePart (interval,date)

返回日期date中,interval指定部分所对应的整数值

DateName (interval,date)

返回日期date中,interval指定部分所对应的字符串名称

参数 interval的设定值:

缩写

中文

备注

Year

yy, yyyy

年 1753 ~ 9999

Quarter

qq, q

季度

季 1 ~ 4

Month

mm, m

月1 ~ 12

Day of Year

dy, y

年中的日

一年的日数,一年中的第几日 1-366

Day

dd, d

日,1-31

Weekday

wk, ww

一周的日数,一周中的第几日 1-7

Week

dw, w

星期

周,一年中的第几周 0 ~ 51

Hour

hh

小时

时0 ~ 23

Minute

mi, n

分钟

分钟0 ~ 59

Second

ss, s

秒 0 ~ 59

Millisecond

ms

毫秒

毫秒 0 ~ 999

Microsecond

mcs

微秒

微秒 0 ~ 999

Nanosecond

ns

纳秒

纳秒 0 ~ 999

3、datepart函数

select  getdate()  as  当前系统日期

9a4d8ad705108578991330e6e615e399.png

--缩写1

select  datepart(mm , getdate())  as  当前月份

916a8bb72e7885d9289bcfa441466a00.png

--缩写2

select  datepart(m , getdate())  as  当前月份

1f5cbe422ead6375e5c1a3e9f0b1302a.png

--全写

select  datepart(month , getdate())  as 当前月份

1f5cbe422ead6375e5c1a3e9f0b1302a.png

4、datename函数

--返回星期的中文名称

select  datename(weekday ,  getdate())  as 当前星期

1f5cbe422ead6375e5c1a3e9f0b1302a.png

5、dateadd/datediff日期加减函数

--当前日期加上2天

select  dateadd(day , 2 , getdate())  as  日期

4b13961624020e872a1de46136f4db77.png

--日期最小值

select  dateadd(mm , 0 , 0)  as 日期最小值

c567bc88c45a5a586d5a797a9fdf5cab.png

--当前日期减去日期最小值,计算出所有的月份数

--第二个参数取0,即最小日期,最小日期是1900-01-01

select  DATEDIFF(mm , 0 , getdate())  as  最小日期到本月的所有月份数

ed7fa913a7823782e53aeddc8d4bc801.png

--当前月份的第一天

--第二个参数取最小日期到当前月份的总月份数,即就是当月

--第三个参数取0,即当前月份第一天,加0天,还是第一天

SELECT  DATEADD(mm ,  DATEDIFF(mm , 0 , getdate()) ,  0)  as 本月第一天

ed7fa913a7823782e53aeddc8d4bc801.png

--本周的星期一

SELECT  DATEADD(wk ,  DATEDIFF(wk , 0 , getdate()) ,  0)  as 本周指定星期几

b8c8199acb953c4519a1e285b79279f7.png

--本年的第一天

SELECT  DATEADD(yy , DATEDIFF(yy , 0 , getdate()) ,  0)  as  本年第一天

aa497f3d71f0c3dd207de7705f72d8db.png

--本季度的第一天

SELECT  DATEADD(qq ,  DATEDIFF(qq , 0 , getdate()) ,  0)  as 本季度第一天

6440fea80672fb750a3ba4cc6b2081ea.png

--当天的凌晨

SELECT  DATEADD(dd ,  DATEDIFF(dd , 0 , getdate()) ,  0)  as 当天凌晨

c4b2273a5293c78072d177379c421d5f.png

--上月的最后一天

--它通过从一个月的最后一天这个例子上减去3毫秒来获得。

--有一点要记住,在Sql Server中时间是精确到3毫秒。

--这就是为什么我需要减去3毫秒来获得我要的日期和时间。

SELECT  dateadd(ms , -3 , DATEADD(mm ,  DATEDIFF(mm , 0 , getdate()) ,  0))

efb03199d31026930f15f9b64436afb8.png

--上年的最后一天

SELECT  dateadd(ms , -3 , DATEADD(yy , DATEDIFF(yy , 0 , getdate()) , 0))  as  上年最后一天

d42ad89f34c325415187743a1d0ddab1.png

--本月的最后一天

SELECT dateadd(ms , -3 , DATEADD(mm , DATEDIFF(m , 0 , getdate())+1 ,  0))  as 本月最后一天

71b224e3aa9177c7d5960676deb02739.png

--本年的最后一天

SELECT  dateadd(ms , -3 , DATEADD(yy , DATEDIFF(yy , 0 , getdate())+1 , 0))  as 本年最后一天

95fdf6ed5e35d0ed89ba9d67af645f81.png

--本月的第一个星期一

select  DATEADD(wk ,  DATEDIFF(wk , 0 , dateadd(dd , 6-datepart(day , getdate()) , getdate())) ,  0)  as  本月第一个星期一

e36ddfdc6debdb5c622a1fe144130ff4.png

6、day()、month()、year()

--返回当前日期的日

select  day(getdate())  as  当前日

12a3906207b699353fc82efd43d633a9.png

--返回当前日期的月份

select  month(getdate())  as  当前月份

320abd783a1c399407875115f6dbfdf6.png

--返回当前日期的年份

select  year(getdate())  as  当前年份

5b1b5c1f7c6a9b9e02b1e4ce290eec26.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值