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
'source' 카테고리의 다른 글
지속성 중에 JPA 필드를 무시하는 가장 쉬운 방법은 무엇입니까? (0) | 2022.11.26 |
---|---|
커스텀 컴퍼레이터를 사용하여 int 배열을 정렬하려면 어떻게 해야 합니까? (0) | 2022.11.26 |
MySQL 데이터베이스 테이블의 최대 레코드 수 (0) | 2022.11.25 |
MAMP에 PHP 버전을 추가하는 방법 (0) | 2022.11.25 |
판다의 열을 regex로 필터링하는 방법 (0) | 2022.11.25 |