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
'Program Club' 카테고리의 다른 글
| null 포인터와 void 포인터의 차이점은 무엇입니까? (0) | 2020.12.03 |
|---|---|
| T-SQL을 사용하여 datetime의 시간을 얻습니까? (0) | 2020.12.03 |
| URL에서 바이트 배열로 이미지 (0) | 2020.12.03 |
| Rails 3에서 초기화 프로그램의로드 순서를 어떻게 변경하나요? (0) | 2020.12.03 |
| 왜 "할당되지 않은 로컬 변수 사용"오류를 컴파일합니까? (0) | 2020.12.03 |