[sql] SQLite DateTime 비교

datetime 문자열을 비교로 사용하여 sqlite 데이터베이스에 대한 쿼리에서 신뢰할 수있는 결과를 얻을 수없는 것 같습니다.

select *
  from table_1
 where mydate >= '1/1/2009' and mydate <= '5/5/2009'

sqlite에 대한 datetime 비교를 어떻게 처리해야합니까?

업데이트 : mydate 필드는 DateTime 데이터 유형입니다.



답변

SQLite에는 전용 datetime 유형 이 없지만 몇 가지 datetime 함수가 있습니다. 해당 함수에서 이해하는 문자열 표현 형식 (실제로는 1-10 형식 만 해당)을 따르고 (값을 문자열로 저장) 사용할 수 있으며, 문자열에 대한 사전 비교는 날짜 / 시간 비교와 일치합니다. 날짜를 시간과 비교하거나 날짜 시간을 시간과 비교하려고 시도하십시오. 어쨌든 전혀 의미가 없습니다).

사용하는 언어에 따라 자동 변환을 받을 수도 있습니다 . (예와 같은 SQL 문의 비교에는 적용되지 않지만 삶을 더 쉽게 만들 것입니다.)


답변

이 문제를 해결하기 위해 날짜를 YYYYMMDD. 그러므로,
where mydate >= '20090101' and mydate <= '20050505'

그것은 항상 평범한 일입니다. 사용자가 날짜를 입력하는 방법을 처리하는 파서 만 작성하면 YYYYMMDD.


답변

최근에 같은 문제가 발생하여 다음과 같이 해결했습니다.

SELECT * FROM table WHERE
    strftime('%s', date) BETWEEN strftime('%s', start_date) AND strftime('%s', end_date)


답변

다음은 SQLite를 사용하여 잘 작동합니다.

SELECT *
    FROM ingresosgastos
    WHERE fecharegistro BETWEEN "2010-01-01" AND "2013-01-01"


답변

Sqlite는 날짜를 비교할 수 없습니다. 초로 변환하고 정수로 캐스팅해야합니다.

SELECT * FROM Table
WHERE
CAST(strftime('%s', date_field)  AS  integer) <=CAST(strftime('%s', '2015-01-01')  AS  integer) ;


답변

다음은 나를 위해 일했습니다.

SELECT *
FROM table_log
WHERE DATE(start_time) <= '2017-01-09' AND DATE(start_time) >= '2016-12-21'


답변

최대 이틀 전부터 오늘까지의 데이터를 원하는 상황이 있습니다. 나는 다음에 도착했다.

WHERE dateTimeRecorded between date('now', 'start of day','-2 days')
                           and date('now', 'start of day', '+1 day') 

좋아, 기술적으로도 원본 포스터처럼 내일 자정에 데이터가 있으면 내일 자정을 가져 오지만 내 데이터는 모두 과거입니다.

기억해야 할 핵심 사항은 초기 포스터에서 2009-11-15 00:00:00 이후 모든 데이터를 제외했다는 것입니다. 따라서 15 일 자정에 기록 된 데이터는 모두 포함 되었지만 15 일 자정 이후의 데이터 는 포함 되지 않았습니다. 그들의 질문이 있었다면

select *
  from table_1
  where mydate between Datetime('2009-11-13 00:00:00')
                   and Datetime('2009-11-15 23:59:59')

명확성을 위해 between 절을 사용합니다.

조금 더 좋았을 것입니다. 한 시간이 실제로 60 초 이상을 가질 수있는 윤초는 여전히 고려하지 않지만 여기에서 토론하기에 충분합니다. 🙂