질문이 있습니다. 하나의 DATE 문자열 “2010-04-29″를 DATETIME (2010-04-29 10:00)으로 저장된 문자열과 비교하여 MySQL 데이터베이스에서 선택할 수 있습니까?
데이터를 필터링하는 날짜 선택기가 하나 있고 다음과 같이 DATETIME 필드로 테이블을 쿼리하고 싶습니다.
SELECT * FROM `calendar` WHERE startTime = '2010-04-29'"
… 그리고 DATETIME 값이 “2010-04-29 10:00″인 행을 가져오고 싶습니다.
어떤 제안? 감사.
답변
다음을 사용하십시오.
SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29'
참고로 2 백만 개의 레코드 테이블이 있는데 비슷한 쿼리를 실행했습니다. Salils 답변은 4.48 초, 위의 답변은 2.25 초가 걸렸습니다.
따라서 테이블이 BIG라면 오히려 이것을 제안 할 것입니다.
답변
DATETIME 열의 DATE 부분이 특정 리터럴과 일치하는 모든 행을 선택하려면 다음과 같이 할 수 없습니다.
WHERE startTime = '2010-04-29'
MySQL은 DATE와 DATETIME을 직접 비교할 수 없기 때문입니다. MySQL이하는 일은 주어진 DATE 리터럴을 시간 ’00 : 00 : 00 ‘으로 확장합니다. 그래서 당신의 상태는
WHERE startTime = '2010-04-29 00:00:00'
확실히 당신이 원하는 것이 아닙니다!
조건은 범위이므로 범위로 지정해야합니다. 몇 가지 가능성이 있습니다.
WHERE startTime BETWEEN '2010-04-29 00:00:00' AND '2010-04-29 23:59:59'
WHERE startTime >= '2010-04-29' AND startTime < ('2010-04-29' + INTERVAL 1 DAY)
DATETIME 열이 1 초 미만의 해상도를 사용하고 23:59:59 + 엡실론에 약속이있는 경우 첫 번째 오류가 발생할 가능성이 거의 없습니다. 일반적으로 두 번째 변형을 사용하는 것이 좋습니다.
두 변형 모두 테이블이 커질 때 중요 해지는 startTime의 인덱스를 사용할 수 있습니다.
답변
SELECT * FROM `calendar` WHERE DATE_FORMAT(startTime, "%Y-%m-%d") = '2010-04-29'"
또는
SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29'
답변
SELECT * FROM sample_table WHERE last_visit = DATE_FORMAT('2014-11-24 10:48:09','%Y-%m-%d %H:%i:%s')
이것은 mysql에서 DATE_FORMAT(date,format)
.
답변
SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29';
도움이되며 DATE
비교하기 전에 값을 변환 할 수 있습니다 .
답변
DATETIME 필드를 다음과 같이 DATE로 캐스트 할 수 있습니다.
SELECT * FROM `calendar` WHERE CAST(startTime AS DATE) = '2010-04-29'
이것은 매우 효율적입니다.
답변
SELECT * FROM `calendar` WHERE startTime like '2010-04-29%'
이후 또는 이전에 무언가를 찾으려면 MySQL 날짜에 비교 연산자를 사용할 수도 있습니다. 이는 단순한 문자열 정렬이 올바르게 정렬하는 방식 (가장 큰 값에서 가장 작은 값에서 가장 작은 것까지 선행 0)으로 작성되기 때문입니다.