2014-09-11 4 views
1

MySQL의 테이블에 날짜와 시간 범위에서 데이터를 얻을 수 있습니다 : -어떻게 MySQL의

ID | From_DateTime  | To_DateTime 

1   2014-09-01 10:00:00 2014-09-10 22:00:00 

설명 : 나는 날짜 및 시간 범위에 대한 데이터베이스 테이블이 개 컬럼을 추가 한

. 위에 표시된 데이터는 01-09-2014에서 10-09-2014까지가 날짜 범위이고 10:00:00 - 22:00:00이 시간 범위임을 의미합니다.

긍정적 인 시나리오 - 지금은 날짜와 시간 모두 범위에 와서 내 쿼리에 2014년 9월 5일 15시 0분 0초을 전달하고있다. 내가 필요한 것은 쿼리의 ID입니다.

부정적인 시나리오 - 지금은 날짜에 와서 내 쿼리에 2014년 9월 5일 23시 0분 0초을 전달하고 범위로 제공하지만 0 결과를 얻을해야하므로 시간이 지정된 범위에 있지 않습니다.

나는 데이터베이스 쿼리에 대해 전혀 알지 못하므로 데이터베이스 전문가로부터 도움을 얻기 위해 여기에 게시하는 이유입니다.

+0

분할이 날짜를 넣어 깜빡하지 마십시오. 그런 다음'DATE()'+'TIME()'함수를 사용하여 비교하십시오. – zerkms

+0

이 2 개의 열을 사용하면 일치하는 것을 할 수 없습니까? 2 대신에 4 개의 열을 가져야합니까? 그렇다면 4 열로 나눠서 쿼리 작성에 참여하십시오. – Scorpion

+0

가능하지만별로 의미가 없습니다. 'datetime'은 정확한 시점을 가리키는 반면,'date'와'time'은 서로 관련이 없습니다. – zerkms

답변

1

이와 비슷한 기능이 작동합니다. 몇 가지 조정이 필요할 수 있습니다.

SELECT ID FROM (
    SELECT ID FROM <tablename> 
    WHERE DATE('<dateTimeValue>') BETWEEN DATE(From_DateTime) AND DATE(To_DateTime) 
    AND TIME('<dateTimeValue>') BETWEEN TIME(From_DateTime) AND TIME(To_DateTime) 
    UNION 
    SELECT 0 AS ID FROM DUAL 
) AS a LIMIT 1 
+0

'2014-09-05 23:00:00'을 전달하면 올바르지 않은 행을 반환하고 날짜와 시간을 모두 일치시켜야합니다. – Scorpion

+0

Gotcha, 위의 편집. 절 사이에 2 개가 필요합니다. –

+1

이것은 당신을 느리게 만들 것입니다. 위의 권장 사항을 취하여 From_Date, To_Date, From_Time, To_Time의 4 개 열을 만들어 색인을 생성 할 수 있도록하고 테스트중인 각 행에서 6 개의 함수를 실행할 필요가 없습니다 –

0

SELECT ID FROM date_time WHERE From_DateTime < '2014년 9월 5일 15시 0분 0초' AND To_DateTime> '2014년 9월 5일 15시 0분 0초'; 현재 스키마 훨씬 이해가되지 않기 때문에,이 날짜와 2 회 : 여기 date_time

테이블 이름입니다 ... 4 개 컬럼에 작은 따옴표