- 采用比较老的方法 FROM_UNIXTIME() 和 UNIX_TIMESTAMP()
SELECT
current_date() today,
(datediff(lastday, firstday) + 1) days
FROM
(
SELECT
CASE
WHEN MONTH(FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd')) IN (4, 6, 9, 11)
THEN date_add(
(FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd')),
30 - DAY(FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd'))
)
WHEN MONTH(FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd')) IN (1, 3, 5, 7, 8, 10, 12)
THEN date_add(
(FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd')),
31 - DAY(FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd'))
)
WHEN MONTH(FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd')) = 2
AND ((YEAR(FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd')) % 4 = 0 AND YEAR(FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd')) % 100 != 0)
OR YEAR(FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd')) % 400 = 0)
THEN date_add(
(FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd')),
29 - DAY(FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd'))
)
ELSE date_add(
(FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd')),
28 - DAY(FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd'))
)
END AS lastday, --获取本月最后一天
concat(substr(current_date(), 1, 8), '01') firstday --获取本月第一天
) t1
运行结果:
today days
2020-08-21 31
- 采用 CURRENT_TIMESTAMP()
SELECT
current_date() today,
(datediff(lastday, firstday) + 1) days
FROM
(
SELECT
CASE
WHEN MONTH(CURRENT_TIMESTAMP()) IN (4, 6, 9, 11)
THEN date_add(CURRENT_TIMESTAMP(), 30 - DAY(CURRENT_TIMESTAMP()))
WHEN MONTH(CURRENT_TIMESTAMP()) IN (1, 3, 5, 7, 8, 10, 12)
THEN date_add(CURRENT_TIMESTAMP(), 31 - DAY(CURRENT_TIMESTAMP()))
WHEN MONTH(CURRENT_TIMESTAMP()) = 2
AND ((YEAR(CURRENT_TIMESTAMP()) % 4 = 0 AND YEAR(CURRENT_TIMESTAMP()) % 100 != 0)
OR YEAR(CURRENT_TIMESTAMP()) % 400 = 0)
THEN date_add(CURRENT_TIMESTAMP(), 29 - DAY(CURRENT_TIMESTAMP()))
ELSE date_add((CURRENT_TIMESTAMP()), 28 - DAY(CURRENT_TIMESTAMP()))
END AS lastday, --获取本月最后一天
concat(substr(current_date(), 1, 8), '01') firstday --获取本月第一天
) t1
运行结果:
today days
2020-08-21 31
- 直接使用函数:
select trunc(current_date(),'MM');
select trunc('2020-08-21','MM');
select last_day(current_date());
select (datediff(last_day(current_date()),
trunc(current_date(),'MM')) + 1) days;
运行结果:
2020-08-01
2020-08-01
2020-08-31
31
- 采用 add_months() 计算本月天数
SELECT datediff(last_day(current_date()),
add_months(last_day(current_date()),-1)) days