programing

MySQL - DATE_ADD 월 간격

css3 2023. 9. 2. 08:46

MySQL - DATE_ADD 월 간격

기능에 문제가 있습니다.DATE_ADDMySQL에 있습니다.

제 요청은 다음과 같습니다.

SELECT * 
FROM mydb 
WHERE creationdate BETWEEN "2011-01-01" AND DATE_ADD("2011-01-01", INTERVAL 6 MONTH) 
GROUP BY MONTH(creationdate)

문제는 결과적으로 6월이 30일밖에 남지 않아서 7월 1일 결과가 나와서 기능이 제대로 작동하지 않는 것 같습니다.

알 수 있는 방법이 있습니까?DATE_ADD일을 잘하고 한 달 안에 올바른 일수를 갖는 것?

DATE_ADD다른 달에 잘 작동합니다.문제는 당신이 6개월을 추가하고 있다는 것입니다.2001-01-01그리고 7월 1일이 거기에 있을 예정입니다.

다음 작업을 수행할 수 있습니다.

SELECT * 
FROM mydb 
WHERE creationdate BETWEEN "2011-01-01" 
                   AND DATE_ADD("2011-01-01", INTERVAL 6 MONTH) - INTERVAL 1 DAY
GROUP BY MONTH(creationdate)

OR

SELECT * 
FROM mydb 
WHERE creationdate >= "2011-01-01" 
AND creationdate < DATE_ADD("2011-01-01", INTERVAL 6 MONTH)
GROUP BY MONTH(creationdate)

자세한 내용은 DATE_ADD 설명서를 참조하십시오.

*올바른 구문 사용

음, 이것은 저에게 예상되는 결과입니다. 7월 1일에 6개월을 더하면 됩니다.

mysql> SELECT DATE_ADD( '2011-01-01', INTERVAL 6 month );
+--------------------------------------------+
| DATE_ADD( '2011-01-01', INTERVAL 6 month ) |
+--------------------------------------------+
| 2011-07-01                                 | 
+--------------------------------------------+

BETWEEN ... AND

expr이 최소값보다 크거나 같고 expr이 max보다 작거나 같으면,BETWEEN1을 반환하고, 그렇지 않으면 0을 반환합니다.

여기서 중요한 부분은 7월 1일인 최대값과 같음입니다.

당신이 그렇게 생각하는 것이 옳습니까?DATE_ADD("2011-01-01", INTERVAL 6 MONTH)'2011-07-01' 대신 '2011-06-30'을 줘야 합니까?물론 2011-01-01 + 6개월은 2011-07-01입니다.당신은 그런 것을 원합니다.DATE_SUB(DATE_ADD("2011-01-01", INTERVAL 6 MONTH), INTERVAL 1 DAY).

DATE_ADD올바르게 작동합니다. 1월 1일과 1월 1일이 2월 1일인 것처럼 1월 1일과 6개월이 7월 1일입니다.

작업 간에는 작업이 포함됩니다.그래서, 당신은 7월 1일까지, 그리고 포함해서 모든 것을 하고 있습니다.(MySQL "between" 절을 참조하십시오. 포함되지 않습니까?)

당신이 해야 할 일은 1일을 빼거나 그 사이 대신 < 연산자를 사용하는 것입니다.

언급URL : https://stackoverflow.com/questions/6845604/mysql-date-add-month-interval