[英]How to get first day of every corresponding month in mysql?
我想獲得當年每個相應月份的第一天。 例如,如果用戶選擇“2010-06-15”,則查詢要求從“2010-06-01”而不是“2010-06-15”運行。
請幫助我如何計算所選日期的第一天。 目前,我正在嘗試使用以下 mysql 選擇查詢來獲得理想的效果:
Select
DAYOFMONTH(hrm_attendanceregister.Date) >=
DAYOFMONTH(
DATE_SUB('2010-07-17', INTERVAL - DAYOFMONTH('2010-07-17') + 1 DAY
)
FROM
hrm_attendanceregister;
謝謝
這是你想要的:
select CAST(DATE_FORMAT(NOW() ,'%Y-%m-01') as DATE);
您可以使用 MySQL 提供的LAST_DAY函數來檢索任何月份的最后一天,這很簡單:
SELECT LAST_DAY('2010-06-15');
將返回:
2010-06-30
不幸的是,MySQL 沒有提供任何FIRST_DAY
函數來檢索一個月的第一天(不知道為什么)。 但是考慮到最后一天,你可以加一天減一個月得到第一天。 因此你可以定義一個自定義函數:
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');
將返回:
2010-06-01
這是舊的,但這可能對新的人類網絡爬蟲有幫助 XD
對於當月的第一天,您可以使用:
SELECT LAST_DAY(NOW() - INTERVAL 1 MONTH) + INTERVAL 1 DAY;
您可以使用EXTRACT
來獲取您想要的日期部分:
EXTRACT( YEAR_MONTH FROM DATE('2011-09-28') )
-- 201109
這適用於分組。
我很驚訝沒有人提出類似的東西(我不知道它的性能如何):
CONCAT_WS('-', YEAR(CURDATE()), MONTH(CURDATE()), '1')
如有必要,可以執行其他日期操作以刪除格式
您可以使用 DATE_FORMAT() 函數來獲取任何日期字段的第一天。
SELECT DATE_FORMAT(CURDATE(),'%Y-%m-01') as FIRST_DAY_CURRENT_MONTH
FROM dual;
使用任何其他日期字段更改 Curdate(),例如:
SELECT DATE_FORMAT(purchase_date,'%Y-%m-01') AS FIRST_DAY_SALES_MONTH
FROM Company.Sales;
然后,使用您自己的問題:
SELECT *
FROM
hrm_attendanceregister
WHERE
hrm_attendanceregister.Date) >=
DATE_FORMAT(CURDATE(),'%Y-%m-01')
您可以使用任何其他給定日期更改 CURDATE()。
使用date_format方法並檢查月份和年份
select * from table_name where date_format(date_column, "%Y-%m")="2010-06"
date_add(subdate(curdate(), interval day(?) day), interval 1 day)
改變? 對應日期
這對我來說很好用。
date(SUBDATE("Added Time", INTERVAL (day("Added Time") -1) day))
**用列名替換“添加時間”
用例:
如果要重置除Month和Year之外的所有日期字段。
如果要將列格式保留為“日期”。 (不是“文本”或“數字”)
慢(17 秒):
SELECT BENCHMARK(100000000, current_date - INTERVAL (day(current_date) - 1) DAY);
SELECT BENCHMARK(100000000, cast(DATE_FORMAT(current_date, '%Y-%m-01') as date));
如果您不需要日期類型,這會更快:Fast (6s):
SELECT BENCHMARK(100000000, DATE_FORMAT(CURDATE(), '%Y-%m-01'));
SELECT BENCHMARK(100000000, DATE_FORMAT(current_date, '%Y-%m-01'));
SELECT LAST_DAY(date) as last_date, DATE_FORMAT(date,'%Y-%m-01') AS fisrt_date FROM table_name
日期=您的列名
計算一個月的第一天的方法有很多種,以下是我電腦上的表現(你可以在自己的電腦上試試)
獲勝者是LAST_DAY(@D - interval 1 month) + interval 1 day
set @D=curdate();
select BENCHMARK(100000000, subdate(@D, (day(@D)-1))); -- 33 seconds
SELECT BENCHMARK(100000000, @D - INTERVAL (day(@D) - 1) DAY); -- 33 seconds
SELECT BENCHMARK(100000000, cast(DATE_FORMAT(@D, '%Y-%m-01') as date)); -- 29 seconds
SELECT BENCHMARK(100000000, LAST_DAY(@D - interval 1 month) + interval 1 day); -- 26 seconds
select big.* from
(select @date := '2010-06-15')var
straight_join
(select * from your_table where date_column >= concat(year(@date),'-',month(@date),'-01'))big;
這不會創建全表掃描。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.