타임 스탬프 날짜를 MySQL의 날짜 전용 매개 변수와 비교하는 방법은 무엇입니까?
SQL 문에서 TIMESTAMP로 저장된 날짜를 YYYY-MM-DD 형식의 날짜와 어떻게 비교합니까?
전의.: SELECT * FROM table WHERE timestamp = '2012-05-05'
이 쿼리는 지정된 날짜에 타임 스탬프가있는 모든 행을 반환하지만 자정 타임 스탬프가있는 행만 반환합니다.
감사
DATE()
함수를 사용 하여 타임 스탬프의 날짜 부분을 추출 할 수 있습니다 .
SELECT * FROM table
WHERE DATE(timestamp) = '2012-05-05'
하지만 타임 스탬프 열에 인덱스가있는 경우 인덱스를 활용할 수 있기 때문에 더 빠릅니다.
SELECT * FROM table
WHERE timestamp BETWEEN '2012-05-05 00:00:00' AND '2012-05-05 23:59:59'
WHERE cast(timestamp as date) = '2012-05-05'
SELECT * FROM table WHERE timestamp >= '2012-05-05 00:00:00'
AND timestamp <= '2012-05-05 23:59:59'
일부에서 제안했듯이 사용 DATE(timestamp)
하면 열에 조작을 적용하므로 인덱스 순서에 의존 할 수 없습니다.
그러나 사용 BETWEEN
은 밀리 초를 포함하는 경우에만 신뢰할 수 있습니다. 예제 타임 BETWEEN '2012-05-05 00:00:00' AND '2012-05-05 23:59:59'
스탬프에서는 2012-05-05 23:59:59.001
과 사이의 타임 스탬프가있는 레코드를 제외합니다 2012-05-05 23:59:59.999
. 그러나이 방법조차도 데이터 유형 정밀도 때문에 몇 가지 문제가 있습니다. 때때로 999 밀리 초가 반올림됩니다.
가장 좋은 방법은 다음과 같습니다.
SELECT * FROM table
WHERE date>='2012-05-05' AND date<'2012-05-06'
MYSQL의 변환 기능 사용 :
SELECT * FROM table WHERE DATE(timestamp) = '2012-05-05'
이것은 작동합니다
SQL 매개 변수를 사용하여 쿼리를 실행하는 경우 도움이 될 것입니다.
SELECT * FROM table WHERE timestamp between concat(date(?), ' ', '00:00:00') and concat(date(?), ' ', '23:59:59')
질문을 읽었을 때 'MySQL'이라는 태그를 볼 때까지 Oracle DB 에 있다고 생각했습니다 . 어쨌든 Oracle과 함께 일하는 사람들에게는 다음과 같은 방법이 있습니다.
SELECT *
FROM table
where timestamp = to_timestamp('21.08.2017 09:31:57', 'dd-mm-yyyy hh24:mi:ss');
사용하다
SELECT * FROM table WHERE DATE(2012-05-05 00:00:00) = '2012-05-05'
'developer tip' 카테고리의 다른 글
JAXB를 사용하는 속성 및 컨텐츠가있는 XML 요소 (0) | 2020.11.01 |
---|---|
R에서 점은 무엇을 의미합니까? 개인 선호도, 명명 규칙 또는 그 이상? (0) | 2020.11.01 |
IEx-여러 줄 명령을 취소하는 방법은 무엇입니까? (0) | 2020.11.01 |
ASPNETCORE_ENVIRONMENT를 asp.net 핵심 응용 프로그램 게시에 고려하도록 설정하는 방법은 무엇입니까? (0) | 2020.11.01 |
CSS 그리드 레이아웃의 동일한 높이 행 (0) | 2020.11.01 |