programing

Mysql 날짜 함수가 다음 시간 동안 작동하지 않습니다.

padding 2023. 10. 15. 17:05
반응형

Mysql 날짜 함수가 다음 시간 동안 작동하지 않습니다.

나는 이것에 대해 아래 쿼리를 사용한 2012-12-28 이하의 모든 레코드를 가져와야 합니다. booking_time은 DATTIME 필드이고 2012-12-28 이하의 레코드가 있지만 0개의 행을 반환합니다.누구 아이디어 있는 사람?

SELECT * FROM ctx_bookings WHERE DATE(booking_time)<=2012-12-28 ORDER BY id ASC

테이블파일

+---------------------+
| booking_time        |
+---------------------+
| 2012-12-20 03:10:09 |
| 2012-12-25 02:10:04 |
+---------------------+

왜 이런 일이 일어나고 있는지 아는 사람?

하나의 인용문으로 가치를 포장하면 반드시 효과가 있을 것입니다.

SELECT * 
FROM ctx_bookings 
WHERE DATE(booking_time) <= '2012-12-28' 
ORDER BY id ASC

날짜시간 자료 아래에 문서화된 바와 같이:

MySQL은 다음과 같은 형식으로 값을 인식합니다.

  • 둘 중 하나의 문자열로서'YYYY-MM-DD'아니면'YY-MM-DD'체재를 갖추다"완화된" 구문이 허용됩니다.날짜 부분 사이의 구분 기호로 구두점 문자를 사용할 수 있습니다.예를들면,'2012-12-31','2012/12/31','2012^12^31',그리고.'2012@12@31'동치입니다.

  • 두 구분 기호가 없는 문자열로서'YYYYMMDD'아니면'YYMMDD'문자열이 날짜로 의미가 있다면 형식을 지정할 수 있습니다.예를들면,'20070523'그리고.'070523'로 해석됩니다.'2007-05-23',그렇지만'071332'비합법적이며(비합법적인 월 및 일 부분이 있음)'0000-00-00'.

  • 둘 중 하나의 숫자로서YYYYMMDD아니면YYMMDD형식, 숫자가 날짜로 의미가 있는 경우.예를들면,19830905그리고.830905로 해석됩니다.'1983-09-05'.

@Barmar가 말했듯이, 당신의 문자 그대로의 표현은2012-12-28산술적으로 평가됩니다.(2012 - 12) - 28, 이는 1,972에 해당합니다.

@JW.의 답변에 따라 해당 식을 인용하여 유효한 날짜 리터럴(위의 첫 번째 양식)을 얻을 수 있습니다.또는:

  • 리터럴을 인용하는 동안 날짜 부분 사이의 구분 기호로 다른 구두점 문자(또는 문자 없음)를 사용할 수 있습니다.

    WHERE DATE(booking_time) <= '2012_12_28'
    WHERE DATE(booking_time) <= '20121228'
    
  • 구분 기호를 제거하고 문자 그대로 따옴표를 사용하지 않을 수 있습니다.

    WHERE DATE(booking_time) <= 20121228
    

또한 이와 같은 필터 기준을 사용하면 함수를 사용합니다(이 경우에는DATE()function) 열에 걸쳐 해당 함수를 평가하려면 전체 테이블 스캔이 필요하므로 어떤 인덱스에서도 이점을 얻지 못합니다.보다 검색 가능한 대안은 기준을 충족하는 열 값의 범위(즉, 시간)에 대해 보다 명확하게 필터링하는 것입니다.

WHERE booking_time < '2012-12-28' + INTERVAL 1 DAY

이는 다음 날 이전에 엄격하게 해당하는 시간은 반드시 이자가 발생한 날 또는 그 이전에 발생하기 때문에 해당합니다.열을 상수식과 비교하기 때문에 검색 가능합니다(결과)+임)에 수).booking_time일치하는 모든 레코드를 즉시 찾기 위해 이동할 수 있습니다.

 SELECT * FROM ctx_bookings WHERE DATE(booking_time)<='2012-12-28' ORDER BY id ASC

이 짝을 시험해 보다

언급URL : https://stackoverflow.com/questions/14051057/mysql-date-function-not-working-for-less-than

반응형