fthiella Asked: 2020-12-04 05:49:38 +0800 CST 2020-12-04 05:49:38 +0800 CST 2020-12-04 05:49:38 +0800 CST 返回该月第一天的日期的函数 772 MySQL 具有LAST_DAY(date)函数,该函数返回该月最后一天的日期: SELECT LAST_DAY(fecha) AS ultimo_dia FROM table 如何获取每月第一天的日期? mysql 8 Answers Voted Best Answer Mosty Mostacho 2020-12-04T06:35:21+08:002020-12-04T06:35:21+08:00 我想到了两种选择: SELECT fecha - INTERVAL DAYOFMONTH(fecha) - 1 DAY; SELECT SUBDATE(fecha, DAYOFMONTH(fecha) - 1); 两者都只涉及 2 个函数调用。它们的效率肯定会有所不同,具体取决于INTERVAL计算速度是否比SUBDATE. Andres Felipe Williams Suarez 2020-12-04T05:54:21+08:002020-12-04T05:54:21+08:00 显然没有返回一个月的第一天的函数,你应该创建它,它是这样的: DELIMITER ;; CREATE FUNCTION FIRST_DAY(day DATE) RETURNS DATE DETERMINISTIC BEGIN RETURN ADDDATE(LAST_DAY(SUBDATE(day, INTERVAL 1 MONTH)), 1); END;; DELIMITER ; 你会像这样使用它 SELECT FIRST_DAY('2010-06-15'); 字体 Santi92 2020-12-04T06:01:03+08:002020-12-04T06:01:03+08:00 每月第一天 select now() - interval (day(now())-1) day 下个月的第一天:就是最后一天+1 select adddate(last_day(curdate()), 1) 来源:从https://stackoverflow.com/questions/3009896/get-the-first-and-last-date-of-next-month-in-mysql上的 StacOverFlow 中提取 Alvaro Montoro 2020-12-04T06:35:14+08:002020-12-04T06:35:14+08:00 一个快速的选项:通过连接日期的年和月来创建一个新的日期,并指定 1 表示日期。代码将是这样的: SELECT DATE(CONCAT_WS('-', YEAR(fecha), MONTH(fecha), '1')) AS primer_dia FROM mitabla 您可以将该代码保存在一个函数中: CREATE FUNCTION FIRST_DAY(fecha DATE) RETURNS DATE RETURN DATE(CONCAT_WS('-', YEAR(fecha), MONTH(fecha), '1')) 并直接从以下调用函数SELECT: SELECT fecha, FIRST_DAY(fecha) FROM mitabla César 2020-12-04T06:00:11+08:002020-12-04T06:00:11+08:00 在我的数据库中进行测试,我认为这可以应用于表: SELECT LAST_DAY(fecha_creacion - INTERVAL 1 MONTH) + INTERVAL 1 DAY FROM tabla; 更新: 仅当您将特定记录传递给它时,它似乎才能正常工作: SELECT LAST_DAY(fecha_creacion - INTERVAL 1 MONTH) + INTERVAL 1 DAY FROM tabla WHERE campo_id=id; 例如,如果您想从表中了解有关所有记录的月份的第一天,您可以添加MAX到查询中: SELECT LAST_DAY(MAX(fecha_creacion) - INTERVAL 1 MONTH) + INTERVAL 1 DAY FROM tabla; Armando Ramirez 2020-04-21T18:54:08+08:002020-04-21T18:54:08+08:00 像这样实现它: SELECT DATE_FORMAT(fecha, '%Y-%m-01') as primer_dia FROM table 无需额外的功能。 Rafael Castro 2020-09-23T00:26:37+08:002020-09-23T00:26:37+08:00 多亏了上面提到的指南,我找到了一个解决方案,并设法通过以下方式获得了当月的第一天: (CURRENT_DATE - INTERVAL DAYOFMONTH(CURRENT_DATE)-1 DAY)) 有了这个,它的作用是获取省略时间的日期,现在如果你想要的是日期和时间,然后用 NOW() 替换 CURRENT_DATE。 CURRENT_DATE 返回 2017-09-01,而 NOW() 返回:2017-09-01 02:10:39 用作指南的示例查询: SELECT saldoInicial FROM ventas WHERE fecha = (CURRENT_DATE - INTERVAL DAYOFMONTH(CURRENT_DATE)-1 DAY)) 它本身更有序,因为它返回 DATE 类型。 Ajsc 2020-08-11T06:22:58+08:002020-08-11T06:22:58+08:00 有一种非常便携的方式对我有用.... SELECT DATE_FORMAT(now(), '%Y-%m-01'); 答:2019-08-01
我想到了两种选择:
两者都只涉及 2 个函数调用。它们的效率肯定会有所不同,具体取决于
INTERVAL
计算速度是否比SUBDATE
.显然没有返回一个月的第一天的函数,你应该创建它,它是这样的:
你会像这样使用它
字体
每月第一天
下个月的第一天:就是最后一天+1
来源:从https://stackoverflow.com/questions/3009896/get-the-first-and-last-date-of-next-month-in-mysql上的 StacOverFlow 中提取
一个快速的选项:通过连接日期的年和月来创建一个新的日期,并指定 1 表示日期。代码将是这样的:
您可以将该代码保存在一个函数中:
并直接从以下调用函数
SELECT
:在我的数据库中进行测试,我认为这可以应用于表:
更新:
仅当您将特定记录传递给它时,它似乎才能正常工作:
例如,如果您想从表中了解有关所有记录的月份的第一天,您可以添加
MAX
到查询中:像这样实现它:
无需额外的功能。
多亏了上面提到的指南,我找到了一个解决方案,并设法通过以下方式获得了当月的第一天:
有了这个,它的作用是获取省略时间的日期,现在如果你想要的是日期和时间,然后用 NOW() 替换 CURRENT_DATE。
CURRENT_DATE 返回 2017-09-01,而 NOW() 返回:2017-09-01 02:10:39
用作指南的示例查询:
它本身更有序,因为它返回 DATE 类型。
有一种非常便携的方式对我有用....
答:2019-08-01