逻辑字段名称

Mysql生成函数及方法

返回数值

备注

自然日历日期

select date(now())

2020/11/13 9:14

也可以手动输入"YYYY-MM-DD"

周初标志

select case when DAYOFWEEK(now()) =‘1’ then 1 else 0 end;

1或0

#获取一个日期是星期几(1=星期天,2=星期一…,7=星期六),如果是周天则标记为1,不是则为0

旬初标志

select case DAYOFMONTH(now()) when ‘1’ then 1 when ‘11’ then 1 when ‘21’ then 1 else 0 end;

1或0

#获取一个日期是当月的第几天;一个月的上旬、中旬、下旬分别是指当月的1日–10日、11日–20日、21日—30日(31日),判断上旬<11,中旬>=11且<21,>=21下旬,二月较为特殊

月初标志

select case DAYOFMONTH(now()) when ‘1’ then 1 else 0 end;

1或0

#获取一个日期是当月的第几天;返回1,标记为月初

季初标志

select case date(now()) when concat(year(now()),’-01-01’) then 1 when concat(year(now()),’-04-01’) then 1 when concat(year(now()),’-07-01’) then 1 when concat(year(now()),’-10-01’) then 1 else 0 end;

1或0

标记4个日期,‘xxxx-01-01’,‘xxxx-04-01’,‘xxxx-07-01’,‘xxxx-10-01’,为TRUE

年初标志

SELECT case DAYOFYEAR(now()) when ‘1’ then 1 else 0 end;

1或0

当前日期与返回日期相等置为TRUE

周末标志

select case DAYOFWEEK(now()) when ‘7’ then 1 else 0 end;

1或0

#获取一个日期是星期几(1=星期天,2=星期一…,7=星期六),如果为7则标记为TRUE

旬末标志

select case DAYOFMONTH(now()) when ‘10’ then 1 when ‘20’ then 1 when DAYOFMONTH(LAST_DAY(now())) then 1 else 0 end;

1或0

#获取一个日期是当月的第几天;一个月的上旬、中旬、下旬分别是指当月的1日–10日、11日–20日、21日—30日(31日),判断上旬<11,中旬>=11且<21,>=21下旬,二月较为特殊

月末标志

select case DAYOFMONTH(now()) when DAYOFMONTH(LAST_DAY(now())) then 1 else 0 end;

1或0

#当前month的最后一天:与当前日期相等,标记为月末

季末标志

select case date(now()) when concat(year(now()),’-03-31’) then 1 when concat(year(now()),’-06-30’) then 1 when concat(year(now()),’-09-30’) then 1 when concat(year(now()),’-12-31’) then 1 else 0 end;

1或0

当前日期等于返回日期,即为季末日期

年末标志

select case date(now()) when concat(year(now()),’-12-31’) then 1 else 0 end;

1或0

当前日期与‘YYYY-12-31’相等,即为年末

日历年月

select concat(year(‘2020-09-10’),’-’,substr(‘2020-09-10’,6,2));

2020/9/1

年初日期

SELECT DATE_SUB(‘2020-11-11’,INTERVAL dayofyear(‘2020-11-11’)-1 DAY);

2020/1/1

季初日期

select concat(year(‘2020-09-10’),’-’, case when (floor(substr(‘2020-09-10’,6,2)/3.1)*3)+1<10 then concat(0,(floor(substr(‘2020-09-10’,6,2)/3.1)*3)+1) else (floor(substr(‘2020-09-10’,6,2)/3.1)*3)+1 end,’-01’);

2020/7/1

返回季初日期

月初日期

SELECT concat(date_format(LAST_DAY(now()),’%Y-%m-’),‘01’);

2020/11/1

旬初日期

select case when DAYOFMONTH(now())<11 then concat(substr(date(now()),1,8),‘01’) when 11<=DAYOFMONTH(now())<21 then concat(substr(date(now()),1,8),‘11’) when 21<=DAYOFMONTH(now()) then concat(substr(date(now()),1,8),‘21’) else 0 end;

2020/11/11

#获取一个日期是当月的第几天;一个月的上旬、中旬、下旬分别是指当月的1日–10日、11日–20日、21日—30日(31日),判断上旬<11,中旬>=11且<21,>=21下旬,二月较为特殊

周初日期

select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 1 DAY);

2020/11/8

#当前week的第一天:

年末日期

select concat(year(‘2020-09-10’),’-’,‘12-31’);

2020/12/31

#当前日期与‘YYYY-12-31’相等,即为年末

季末日期

select LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM ‘2020-07-02’),1) + interval QUARTER(‘2020-07-02’)*3-1 month);

2020/9/30

当前日期等于返回日期,即为季末日期

月末日期

SELECT LAST_DAY(now());

2020/11/30

#当前month的最后一天:与当前日期相等,标记为月末

旬末日期

select case when DAYOFMONTH(now())<11 then concat(substr(date(now()),1,8),‘10’) when 11<=DAYOFMONTH(now())<21 then concat(substr(date(now()),1,8),‘20’) when 21<=DAYOFMONTH(now()) then last_day(now()) else 0 end;

2020/11/20

#获取一个日期是当月的第几天;一个月的上旬、中旬、下旬分别是指当月的1日–10日、11日–20日、21日—30日(31日),判断上旬<11,中旬>=11且<21,>=21下旬,二月较为特殊

周末日期

select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) - 5 DAY);

2020/11/14

#当前week的最后一天:

上年末日期

select concat(year(date(date_add(now(),interval-1 year))),’-12-31’);

2019/12/31

上季末日期

select LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM CURDATE()),1) + interval QUARTER(CURDATE())*3-4 month)

2020/9/30

前一quarter的最后一天:

上月末日期

select last_day(date_sub(now(),interval 1 month));

2020/10/31

前一month的最后一天:

上旬末日期

select case when DAYOFMONTH(now())<11 then last_day(date_add(now(),interval-1 month)) when 11<=DAYOFMONTH(now())<21 then concat(substr(date(now()),1,8),‘10’) when 21<=DAYOFMONTH(now()) then concat(substr(date(now()),1,8),‘20’) else 0 end;

2020/11/10

#获取一个日期是当月的第几天;一个月的上旬、中旬、下旬分别是指当月的1日–10日、11日–20日、21日—30日(31日),判断上旬<11,中旬>=11且<21,>=21下旬,二月较为特殊

上周末日期

select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 2 DAY)

2020/11/7

前一week的最后一天:

年度

select year(now());

2020

季度

select QUARTER(now());

4

月份

select MONTH(now());

11

假期日期

根据假日办发布的假期日历进行标记

假期类型代码

周末或节假日

根据假日办发布的假期日历进行标记

星期中第几天

select DAYOFWEEK(now());

6

#获取一个日期是星期几(1=星期天,2=星期一…,7=星期六)

月中第几天

select DAYOFMONTH(now());

13

#获取一个日期是月中的第几天;

年中第几天

select DAYOFYEAR(now());

318

#获取一个日期是当前年的第几天;

年中第几星期

select DATE_FORMAT(CURRENT_DATE(),’%v’);

46

年中第几个星期

季度中第几月

select concat(QUARTER(now()),’-’,case when MONTH(now()) in(1,4,7,10) then ‘1’ when MONTH(now()) in(2,5,8,11) then ‘2’ else ‘3’ end );

第X季度(-)第X月

季度中第几月

年中第几月

select MONTH(now());

11

年中第几月

年中第几季度

select QUARTER(date(now()));

4

年中第几季度