source

mysql datetime 비교

factcode 2022. 11. 25. 20:50
반응형

mysql datetime 비교

예를 들어, 다음 쿼리는 정상적으로 동작합니다.

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

하지만 이것은 분명히 '문자열' 비교를 수행하고 있습니다. MySQL에 특별히 'datetime' 비교를 하는 함수가 내장되어 있는지 궁금했습니다.

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

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

WHERE int_column = '1'

...여기서 문자열 값 '1'이 INTeger로 변환됩니다.int_column의 데이터 타입은 CHAR/VARCHAR/TEXT가 아닌 INT입니다.

스트링을 명시적으로 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를 참조해 주세요. 식 평가에 변환을 입력합니다.

연산자가 다른 유형의 오퍼랜드와 함께 사용되는 경우 오퍼랜드의 호환성을 확보하기 위해 type conversion이 발생합니다.일부 변환은 암묵적으로 이루어집니다.예를 들어 MySQL은 필요에 따라 자동으로 숫자를 문자열로 변환하고 그 반대의 경우도 마찬가지입니다.

꽤 오래되었다는 것은 알지만, 이 문제에 직면했을 뿐이며, SQL 문서에서 다음과 같은 것을 볼 수 있습니다.

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

STR_을 사용하는 것이 좋을 것 같습니다.TO_DATE는 그것만을 위한 기능을 만드는 데 시간이 걸렸고 BETWEEN 문서에서 이것을 발견했다는 사실도...

언급URL : https://stackoverflow.com/questions/3989385/mysql-datetime-comparison

반응형