SQL에서 날짜 값을 비교하는 방법은 무엇입니까?
문제
MySQL 구문 사용 및 다음과 같은 행이있는 테이블을 사용합니다.
mydate DATETIME NULL,
다음과 같은 작업을 수행하는 방법이 있습니까?
... WHERE mydate<='2008-11-25';
나는 노력하고 있지만 실제로 작동하지는 않습니다.
해결책 2
Nevermind는 답을 찾았습니다. 기꺼이 대답하려는 사람에게도 똑같이
WHERE DATEDIFF(mydata,'2008-11-20') >=0;
다른 팁
음, WHERE mydate<='2008-11-25'
~이다 그것을하는 방법. 작동해야합니다.
오류 메시지가 표시 되나요? 고대 버전의 MySQL을 사용하고 있습니까?
편집 : mysql 5.x에서 다음은 나에게 잘 작동합니다.
create temporary table foo(d datetime);
insert into foo(d) VALUES ('2000-01-01');
insert into foo(d) VALUES ('2001-01-01');
select * from foo where d <= '2000-06-01';
표준 SQL 구문에서는 다음을 사용합니다.
WHERE mydate <= DATE '2008-11-20'
즉, 키워드 날짜는 문자열보다 우선해야합니다. 그러나 일부 DBM에서는 그렇게 명백 할 필요가 없습니다. 시스템은 날짜 열을 문자열로 또는 문자열을 날짜 값으로 자동으로 변환합니다. 날짜가 문자열로 변환되면 명목상 몇 가지 흥미로운 의미가 있습니다. 첫 번째 밀레니엄 (0001-01-01 .. 0999-12-31)의 날짜가 발생하면 주요 제로 (ES)는 생략됩니다. 서식 시스템.
시간 구성 요소를 추가 할 수 있습니다
WHERE mydate<='2008-11-25 23:59:59'
그러나 MyDate가 '2008-11-25 24:59:59'인 경우 DST 전환 날짜에서 실패 할 수 있으므로 다음 날짜 이전에 모든 것을 잡는 것이 가장 안전 할 것입니다.
WHERE mydate < '2008-11-26 00:00:00'
문제는 날짜뿐만 아니라 DateTime 데이터를 다루고 있다는 것입니다. 행에 '2008-11-25 09:30 AM'인 MyDate가 있다면 여기서 mydate <= '2008-11-25'; 그 행을 반환하지 않을 것입니다. '2008-11-25'의 암시 적 시간은 00:00 (자정)이므로 날짜 부분이 동일하지만 동일하지 않으며 MyDate가 더 큽니다.
<= '2008-11-25'대신 < '2008-11-26'을 사용하면 작동합니다. Datediffe Method는 날짜 부분 만 비교하고 시간을 무시하기 때문에 작동합니다.