时间函数:

具体案例:

上月数据:

DATE_SUB()推算出上月具体的日期,然后使用YEAR()或MONTH()函数匹配年份和月份。

-----方法一:

year = YEAR(DATE_SUB('2023-03-19 08:00:00', INTERVAL 1 MONTH))

AND month = MONTH(DATE_SUB('2023-03-19 08:00:00', INTERVAL 1 MONTH))  

YEAR()或MONTH()函数 

-----方法二

year = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)

AND month = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)

 EXTRACT()函数,分别提取上月年份和月份,然后进行匹配。

------方法三:

 --当前时间

year = EXTRACT(YEAR FROM (CURRENT_DATE - INTERVAL '1 MONTH'))

AND month = EXTRACT(MONTH FROM (CURRENT_DATE - INTERVAL '1 MONTH'))



--给定时间

year = EXTRACT(YEAR FROM (‘2023-01-01’ - INTERVAL '1 MONTH'))

AND month = EXTRACT(MONTH FROM (‘2023-01-01’ - INTERVAL '1 MONTH'))

上周数据:

DATE_SUB()推算上周的临界值(即周一和周日)

-----通用
date BETWEEN DATE_SUB(CURRENT_DATE, INTERVAL (WEEKDAY(CURRENT_DATE) + 7) DAY) AND DATE_SUB(CURRENT_DATE, INTERVAL (WEEKDAY(CURRENT_DATE) + 1) DAY)

----格式转化
date >= DATE_FORMAT(DATE_SUB(CURRENT_DATE, INTERVAL WEEKDAY(CURRENT_DATE) + 7 DAY), '%Y%m00')

AND date <= DATE_FORMAT(DATE_SUB(CURRENT_DATE, INTERVAL WEEKDAY(CURRENT_DATE) + 1 DAY), '%Y%m00')

YEARWEEK(date,mode)函数 

YEARWEEK(date,1) = YEARWEEK('2023-11-23' - INTERVAL 1 WEEK ,1);

--YEARWEEK()函数返回结果:202323(年份+第几周)

注意:

1. mode参数取值如下:

  • 0 - 星期的第一天是星期日(默认值)
  • 1 - 一周的第一天是星期一,第一周是超过3天
  • 2 - 星期的第一天是星期天
  • 3 - 一周的第一天是星期一,第一周是超过3天

2.  不需要考虑跨年问题

例如:2023年第一周:1.1

           2023年第二周:1.2 - 1.8

          则:YEARWEEK('2023-01-01') = 202252

          解释:2023年第一周少于3天,所以视为2022年最后一周。不会出现2022-12-31和2023-01-01为同一周,进行周计算结果不同的问题。

3. 求上周不可以使用WEEK()函数

  因为使用WEEK()函数,需要同时匹配年和周,可能存在跨年问题(上周周一和周日不在一年)。

本周数据:

DATE(time) BETWEEN DATE_SUB('2023-04-27', INTERVAL (WEEKDAY('2023-04-27')) DAY) AND DATE_ADD('2023-04-27', INTERVAL (6-WEEKDAY('2023-04-27')) DAY)

获取年份:

YEAR(emp_hire_date) = 2022



--如果你的数据库系统不支持YEAR()函数,可能需要使用其他函数或方法

EXTRACT(YEAR FROM emp_hire_date) = 2022



--或者在SQLite中

strftime('%Y', emp_hire_date) = '2022'

OTHER函数:

1. STR_TO_DATE()   //将字符串转化为日期

例如:

STR_TO_DATE(login_time, '%Y.%m.%d') <= '2019-08-10' 

当前时间:

CURRENT_DATE                   ‘2023-11-22’

CURRENT_DATE()                 ‘2023-11-22’

CURDATE()                             ‘2023-11-22’

NOW()                                     ‘2023-07-19 14:30:45’(YYYY-MM-DD HH:MM:SS)

CURRENT_TIMESTAMP        ‘2023-07-19 14:30:45’(YYYY-MM-DD HH:MM:SS)

SYSDATE()                             ‘2023-07-19 14:30:45’(YYYY-MM-DD HH:MM:SS)

MYSQL数据类型:

数据类型                    零值
DATE                       0000-00-00
TIME                        00:00:00
DATETIME              0000-00-00 00:00:00
TIMESTAMP           0000-00-00 00:00:00
YEAR                      0000

  • 22
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值