Program Club

mysql 날짜 시간 비교

proclub 2020. 12. 3. 20:48
반응형

mysql 날짜 시간 비교


예를 들어 다음 쿼리는 잘 작동합니다.

SELECT * 
  FROM quotes 
 WHERE expires_at <= '2010-10-15 10:00:00';

하지만 이것은 분명히 '문자열'비교를 수행하고 있습니다. 특히 '날짜 시간'비교를 수행하는 MySQL에 내장 된 함수가 있는지 궁금합니다.


... 이것은 분명히 '문자열'비교를 수행하고 있습니다.

아니요-날짜 / 시간 형식이 지원되는 형식과 일치하면 MySQL은 암시 적 변환을 수행하여 비교되는 열을 기반으로 값을 DATETIME으로 변환합니다. 다음과 같은 일이 발생합니다.

WHERE int_column = '1'

... int_column'의 데이터 유형이 CHAR / VARCHAR / TEXT가 아니라 INT 이기 때문에 문자열 값 "1"이 INTeger로 변환됩니다 .

문자열을 DATETIME으로 명시 적으로 변환하려면 STR_TO_DATE 함수 가 최선의 선택입니다.

WHERE expires_at <= STR_TO_DATE('2010-10-15 10:00:00', '%Y-%m-%d %H:%i:%s')

그러나 이것은 분명히 '문자열'비교를 수행하고 있습니다.

아니요. 문자열은 자동으로 DATETIME 값으로 캐스팅됩니다.

11.2를 참조하십시오 . 식 평가에서 형식 변환.

연산자가 다른 유형의 피연산자와 함께 사용되는 경우 유형 변환이 발생하여 피연산자가 호환되도록합니다. 일부 변환은 암시 적으로 발생합니다. 예를 들어, MySQL은 필요에 따라 숫자를 문자열로 자동 변환하고 그 반대의 경우도 마찬가지입니다.


꽤 오래된 것을 알고 있지만 문제가 발생하고 SQL 문서에서 본 내용이 있습니다.

[날짜 또는 시간 값과 함께 BETWEEN을 사용할 때 최상의 결과를 얻으려면] CAST ()를 사용하여 값을 원하는 데이터 유형으로 명시 적으로 변환하십시오. 예 : DATETIME을 두 개의 DATE 값과 비교하는 경우 DATE 값을 DATETIME 값으로 변환하십시오. DATE와의 비교에서 '2001-1-1'과 같은 문자열 상수를 사용하는 경우 문자열을 DATE로 캐스트하십시오.

나는 STR_TO_DATE를 사용하는 것이 더 낫다고 생각합니다. 왜냐하면 그들은 그것을 위해 함수를 만드는 데 시간이 걸리고 BETWEEN doc에서 이것을 발견했다는 사실 때문에 ...

참고 URL : https://stackoverflow.com/questions/3989385/mysql-datetime-comparison

반응형