itsource

mysql에서 해당 달의 첫날을 얻는 방법은 무엇입니까?

mycopycode 2022. 9. 17. 09:59
반응형

mysql에서 해당 달의 첫날을 얻는 방법은 무엇입니까?

저는 매년 해당하는 달의 첫날을 받고 싶습니다.예를 들어 사용자가 '2010-06-15'를 선택한 경우 '2010-06-15'가 아닌 '2010-06-01'부터 쿼리를 실행해야 합니다.

선택한 날짜로부터 첫날을 계산하는 방법을 알려주세요.현재 다음 mysql select 쿼리를 사용하여 desirable을 얻으려고 합니다.

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

그 달의 첫날은 단순하기 때문에 실제로 간단한 해결책이 있다.today - (day_of_month_in_today - 1):

select now() - interval (day(now())-1) day

그것을 극단적으로 우회적이고 간접적인 다른 방법들과 대조하라.


또한 시간 구성요소에 관심이 없기 때문에 이 함수가 더 나은(그리고 더 빠른) 함수입니다.now()또한 님의 2-Aity 과부하를 이용할 수 있습니다.그것은, 를 사용하는 것보다 퍼포먼스가 높기 때문입니다.interval따라서 더 나은 해결책은 다음과 같습니다.

select subdate(curdate(), (day(curdate())-1))

오래된 것이지만 새로운 인간 웹 크롤러 XD에 도움이 될 수 있습니다.

이 달의 첫 번째 날에는 다음을 사용할 수 있습니다.

SELECT LAST_DAY(NOW() - INTERVAL 1 MONTH) + INTERVAL 1 DAY;

사용할 수 있습니다.EXTRACT원하는 날짜 부품을 구하려면:

EXTRACT( YEAR_MONTH FROM DATE('2011-09-28') )
-- 201109

이 방법은 그룹화에 적합합니다.

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()는 지정된 다른 날짜로 변경할 수 있습니다.

아무도 이와 같은 것을 제안하지 않은 것이 놀랍습니다(이것이 얼마나 뛰어난지 모르겠습니다).

CONCAT_WS('-', YEAR(CURDATE()), MONTH(CURDATE()), '1')

필요에 따라 추가 날짜 작업을 수행하여 형식을 제거할 수 있습니다.

date_format 메서드를 사용하여 month & year만 체크합니다.

select * from table_name where date_format(date_column, "%Y-%m")="2010-06"
SELECT LAST_DAY(date) as last_date, DATE_FORMAT(date,'%Y-%m-01') AS fisrt_date FROM table_name

date=열 이름

달의 첫날을 계산하는 방법은 여러 가지가 있으며, 다음은 내 컴퓨터 성능입니다(사용자의 컴퓨터에서 이 작업을 시도할 수 있습니다).

그리고 승리자는.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

가 사용하는 솔루션last_day()한 달과 하루는 서로 바꿀 수 없습니다.

예제:

date_sub(date_add(last_day(curdate()), interval 1 day), interval 3 month) 

항상 지정된 기간 동안 돌아가기를 원하는 기간 동안 작동합니다.

date_add(date_sub(last_day(now()), interval 3 month), interval 1 day)

예를 들어 현재 달이 30일이고 다시 빼는 달(그리고 하루를 더하는 달)이 31일 경우 오류가 발생할 수 있습니다.

date_add(subdate(curdate(), interval day(?) day), interval 1 day)

?를 해당 날짜로 변경합니다.

저는 이거면 돼요.

 date(SUBDATE("Added Time", INTERVAL (day("Added Time") -1) day))

** "Added Time"을 열명으로 바꿉니다.

사용 사례:

  1. 연도를 제외한 모든 날짜 필드를 재설정하는 경우.

  2. 형식을 "날짜"로 유지하려는 경우.('텍스트' 또는 '숫자'가 아님)

저속(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));

날짜 유형이 필요하지 않은 경우 이 방법이 더 빠릅니다.고속(6초):

SELECT BENCHMARK(100000000, DATE_FORMAT(CURDATE(), '%Y-%m-01'));
SELECT BENCHMARK(100000000, DATE_FORMAT(current_date, '%Y-%m-01'));
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;

이렇게 하면 전체 테이블 검색이 생성되지 않습니다.

언급URL : https://stackoverflow.com/questions/3298288/how-to-get-first-day-of-every-corresponding-month-in-mysql

반응형