MySQL“사이”조항이 포함되지 않습니까?
between절로 쿼리를 실행 하면 끝 값을 제외하는 것으로 보입니다.
예를 들면 다음과 같습니다.
select * from person where dob between '2011-01-01' and '2011-01-31'
이것은 dob'2011-01-01'에서 '2011-01-30'까지의 모든 결과를 얻습니다 . dob'2011-01-31'인 레코드를 건너 뜁니다 . 이 쿼리가 왜 이런 식으로 작동하는지, dob'2011-01-31'인 레코드를 포함하도록 쿼리를 수정하는 방법을 누구나 설명 할 수 있습니까 ? 종료 날짜에 1을 추가하지 않고 (사용자가 선택했기 때문에)
이 필드 dob에는 아마도 시간 구성 요소가 있습니다.
잘라 내기 :
select * from person
where CAST(dob AS DATE) between '2011-01-01' and '2011-01-31'
로부터 MySQL을 수동 :
이는 표현식과 같습니다 (최소 <= expr AND expr <= max)
문제는 2011-01-31이 실제로 2011-01-31 00:00:00이라는 것입니다. 그것은 하루의 시작입니다. 낮에는 모든 것이 포함되지 않습니다.
select * from person where dob between '2011-01-01 00:00:00' and '2011-01-31 23:59:59'
쿼리에서 참조하는 필드가 날짜 유형 또는 날짜 시간 유형입니까?
설명하는 동작의 일반적인 원인은 실제로 날짜 유형을 사용해야하는 DateTime 유형을 사용할 때입니다. 즉, 누군가가 태어난 시간을 정말로 알아야 할 필요가 없다면 날짜 유형을 사용하십시오.
마지막 날이 결과에 포함되지 않는 이유는 쿼리에서 쿼리에 지정하지 않은 날짜의 시간 부분을 쿼리가 가정하는 방식입니다.
즉, 쿼리는 2011-01-30과 2011-01-31 사이의 자정까지 해석되지만 2011-01-31의 하루 후일에 값이있을 수 있습니다.
제안 : 날짜 / 시간 유형 인 경우 필드를 날짜 유형으로 변경하십시오.
안녕하세요,이 질문은 저에게 효과적입니다.
select * from person where dob between '2011-01-01' and '2011-01-31 23:59:59'
select * from person where DATE(dob) between '2011-01-01' and '2011-01-31'
놀랍게도 이러한 변환은 MySQL의 많은 문제에 대한 솔루션입니다.
상위 날짜를 날짜 + 1 일로 설정하므로 2011-02-01로 설정하십시오.
다음과 같이 쿼리를 실행할 수 있습니다.
select * from person where dob between '2011-01-01' and '2011-01-31 23:59:59'
날짜가 하드 코딩 된 경우 다른 사람들이 지적한 것처럼.
반면, 날짜가 다른 테이블에있는 경우 다음과 같이 날짜를 추가하고 초를 뺄 수 있습니다 (두 번째 / 시간없이 날짜가 저장된 경우).
select * from person JOIN some_table ... where dob between some_table.initial_date and (some_table.final_date + INTERVAL 1 DAY - INTERVAL 1 SECOND)
dob(응답 된 답변에서와 같이) Fiels 에 캐스트를하지 마십시오. 큰 성능 문제가 발생할 수 있습니다 ( dob필드 에서 인덱스를 사용할 수없는 경우). 또는 과 같은 것을 만들면 실행 계획이에서 (으) using index condition로 변경 될 수 있으므로주의하십시오!using whereDATE(dob)CAST(dob AS DATE)
참고 URL : https://stackoverflow.com/questions/5080824/mysql-between-clause-not-inclusive
'Programming' 카테고리의 다른 글
| Windows 7에서 Python 경로 추가 (0) | 2020.06.23 |
|---|---|
| PHP에서 문장의 첫 단어를 얻는 방법? (0) | 2020.06.23 |
| Scala 프로젝트에서 sbt vs maven 사용의 장단점 (0) | 2020.06.23 |
| 사용자 정의 필드 용 데이터베이스를 설계하는 방법은 무엇입니까? (0) | 2020.06.23 |
| Linux에서 쓰기 손실을 유발하는 I / O 오류에 대처하기위한 프로그램 작성 (0) | 2020.06.23 |