本文介绍 mysql 和 sqlserver 获取当月每一天的方法,以及用到的基本函数的讲解
- MySQL:
mysql 获取当月每一天
SELECT
@cdate := date_add(@cdate, INTERVAL - 1 DAY) AS days,
@num := @num - 1 AS nowday
FROM
mysql.help_keyword,
(
SELECT
@cdate := date_add(
last_day(curdate()),
INTERVAL 1 DAY
),
@num := (
last_day(curdate()) - DATE_ADD(
curdate(),
INTERVAL - DAY (curdate()) + 1 DAY
)
) + 2
) t1
WHERE
help_keyword_id < DAY (last_day(curdate()))
ORDER BY days
输出:
思路:
要有一个数据记录在31条(月最大天数)以上的表,
这个表可以是自己union all 31天,也可以建一个只有一个字段的表,有31条记录就行
例子里用的是系统表,都有的,就是访问权限得注意,没设置权限的就不用管这么多了
函数介绍:
- 获取当前日期:select curdate()
- 获取月最后一天:select last_day(curdate())
- 日期加减(获取前一天): select date_add(curdate(), INTERVAL - 1 DAY)【正数就加,负数就减,最后的DAY是按天减,当天还可以按月减,按小时分钟减等等】
想了解更多的童鞋可以看这里:
https://blog.youkuaiyun.com/yuxiayiji/article/details/7480785
- sql server
sql server 获取当月没一天
SELECT
number + 1
FROM
master..spt_values
WHERE
type = 'p'
AND DATEADD(
DAY,
number,
CAST (
CONVERT (VARCHAR(7), getdate(), 120) + '-01' AS datetime
)
) < DATEADD(
MONTH,
1,
CAST (
CONVERT (VARCHAR(7), getdate(), 120) + '-01' AS datetime
)
)
思路:
和上面思路一样。。
函数介绍:
- 获取当前日期(精确到了毫秒):select getdate()
- 转换日期格式:convert(varchar(7),getdate(),120) 【120代表只获取到年月,不获取日】
- 日期加减:DATEADD(datepart,number,date)
具体方法参考:
https://blog.youkuaiyun.com/akxj2022/article/details/88887611