Programing

MySQL을 사용하여 두 날짜 사이에 어떻게 쿼리합니까?

lottogame 2020. 5. 5. 19:29
반응형

MySQL을 사용하여 두 날짜 사이에 어떻게 쿼리합니까?


다음 쿼리 :

SELECT * FROM `objects` 
WHERE (date_field BETWEEN '2010-09-29 10:15:55' AND '2010-01-30 14:15:55')

아무것도 반환하지 않습니다.

그래도 쿼리가 작동하기에 충분한 데이터가 있어야합니다. 내가 무엇을 잘못하고 있지?


두 번째 날짜는 첫 날짜 이전입니다 (예 : 2010 년 9 월 29 일과 2010 년 1 월 30 일 사이에 쿼리 함). 날짜 순서를 반대로 해보십시오.

SELECT *
FROM `objects`
WHERE (date_field BETWEEN '2010-01-30 14:15:55' AND '2010-09-29 10:15:55')

검색어 날짜는

select * from table between `lowerdate` and `upperdate`

시험

SELECT * FROM `objects` 
WHERE  (date_field BETWEEN '2010-01-30 14:15:55' AND '2010-09-29 10:15:55')

인가 date_fielddatetime? 또한 초기 날짜를 먼저 입력해야합니다.

그것은해야한다:

SELECT * FROM `objects` 
WHERE  (date_field BETWEEN '2010-01-30 14:15:55' AND '2010-09-29 10:15:55')

DATE ()는 날짜 또는 날짜 / 시간 표현식의 날짜 부분 만 추출하는 MySQL 함수입니다.

SELECT * FROM table_name WHERE DATE(date_field) BETWEEN '2016-12-01' AND '2016-12-10';

@sabin의 답변에 대한 확장 기능과 날짜 부분 만 시간 을 비교하려는 경우 힌트 :

비교할 필드가 datetime 유형의 것이고 날짜비교를 위해 지정된 경우,이 날짜 는 내부적으로 datetime 값으로 변환 됩니다. 이것은 다음 쿼리가

SELECT * FROM `objects` WHERE (date_time_field BETWEEN '2010-01-30' AND '2010-09-29')

로 변환됩니다

SELECT * FROM `objects` WHERE (date_time_field BETWEEN '2010-01-30 00:00:00' AND '2010-09-29 00:00:00')

내부적으로.

결과적으로 시간이 00:00:00보다 큰 2010-09-29의 개체가 포함되지 않은 결과가 발생합니다!

따라서 날짜가 2010-09-29 인 모든 개체도 포함해야하는 경우 비교할 필드를 날짜로 변환해야합니다.

SELECT * FROM `objects` WHERE (DATE(date_time_field) BETWEEN '2010-01-30' AND '2010-09-29')

크거나 같거나 작거나 같게 비교하여 수동으로 수행 할 수 있습니다.

 select * from table_name where created_at_column  >=   lower_date  and  created_at_column <= upper_date;

이 예에서는 특정 날마다 데이터를 검색해야합니다. 우리는 하루의 시작부터 다른 날의 최신 초까지 비교할 것입니다.

  select * from table_name where created_at_column  >=   '2018-09-01 00:00:00'  and  created_at_column <= '2018-09-05 23:59:59';

서버 측 또는 클라이언트 측의 날짜 구성에 문제가있을 수 있습니다. 호스트가 스페인어, 프랑스어 또는 기타 형식으로 구성되어있을 때 여러 데이터베이스에서 일반적인 문제 인 것으로 나타났습니다 ... dd / mm / yyyy 또는 mm / dd / yyyy 형식에 영향을 줄 수 있습니다.


date_field를 날짜로 캐스트하십시오.

SELECT * FROM `objects` 
WHERE (cast(date_field as date) BETWEEN '2010-09-29' AND 
'2010-01-30' )

날짜 시간 값을 사용할 때는 필드를로 변환 DateTime하지 말아야 Date합니다. 시도 :

SELECT * FROM `objects` 
WHERE (CAST(date_field AS DATETIME) 
BETWEEN CAST('2010-09-29 10:15:55' AS DATETIME) AND CAST('2010-01-30 14:15:55' AS DATETIME))

날짜를 바꿔보십시오.

2010-09-29 > 2010-01-30?

참고 URL : https://stackoverflow.com/questions/3822648/how-do-i-query-between-two-dates-using-mysql

반응형