복붙노트

[SQL] SQLite는 날짜를 비교

SQL

SQLite는 날짜를 비교

나는이 SQL 문이 :

SELECT Geburtsdatum FROM Kunde
WHERE Geburtsdatum BETWEEN '1993-01-01' AND '2000-01-01'

하지만 내가 좋아하는 몇 가지 이상한 결과를 얻을 : 1990년 2월 2일

'탄생'은 DATE입니다

어떤 제안 또는 솔루션?

내 테이블 구조 :

CREATE TABLE Kunde (
  Kunde_ID INTEGER NOT NULL ,
  Card INTEGER ,
  Vorname VARCHAR(255) NOT NULL ,
  Nachname VARCHAR(255) NOT NULL ,
  Ort VARCHAR(255) NOT NULL ,
  Strasse VARCHAR(255) NOT NULL ,
  Postleitzahl VARCHAR(10) NOT NULL ,
  Mail VARCHAR(255) ,
  Telefonnummer VARCHAR(255) ,
  Geburtsdatum DATE NOT NULL ,
  Beitrittsdatum DATE NOT NULL ,
  Geschlecht INTEGER NOT NULL ,
  Land VARCHAR(255) NOT NULL DEFAULT 'Österreich' ,
  Bankname VARCHAR(255) ,
  Bankleitzahl VARCHAR(255) ,
  Kontonummer VARCHAR(255) ,
  GroupID INTEGER NOT NULL ,
  Besucher INTEGER ,
  Access BOOLEAN ,
  image BLOB NULL ,
  writeDate DATE ,
  drinkAbo BOOLEAN ,
  PRIMARY KEY (Kunde_ID) )

해결법

  1. ==============================

    1.문서에서 :

    문서에서 :

    그래서 열은 정확하게 날짜로 저장되지 않습니다. 더 읽기, 우리는 DATE로를 지정된 열이 실제로 선호도 규칙 5를 사용하여 숫자로 저장되는 것을 배웁니다.

    1.2 절을 다시 올라가고 :

    좋은. 그럼 해보자 :

    SELECT Geburtsdatum FROM Kunde
    WHERE Geburtsdatum 
        BETWEEN julianday('1993-01-01') AND julianday('2000-01-01'); 
    

    이상한 일이지만, SQL 바이올린 문자열로 저장 날짜 보인다 그리고 위의 작업을하지 않습니다. 이 경우, 다음을 수행해야합니다

    SELECT Geburtsdatum FROM Kunde
    WHERE date(Geburtsdatum)
        BETWEEN date('1993-01-01') AND date('2000-01-01'); 
    

    또한, 귀하의 경우 일부 이상한을 받고있는 것으로 보인다 (읽기 : 지역화 된) 형식으로 반환. 그것은 정말 그냥 다른 형식으로도 귀하의 경우 문자열입니다 있는지 궁금해. 당신이 시도 할 수 :

    SELECT Geburtsdatum FROM Kunde
    WHERE strftime('%d.%m.%Y', Geburtsdatum)
        BETWEEN date('1993-01-01') AND date('2000-01-01'); 
    
  2. ==============================

    2.누군가가 같은 문제를 가지고 그것을 해결되었다. (비교 이전 날짜 함수를 사용)

    누군가가 같은 문제를 가지고 그것을 해결되었다. (비교 이전 날짜 함수를 사용)

    SQLite는 날짜 시간 비교를 참조

    발췌 : 날짜 시간 함수를 다음과 YYYY-MM-DD HH 같은 문자열 포맷 갖는 mm 다음과 같다 : SS 난 좋은 결과를 얻을

    select * 
      from table_1 
      where mydate >= Datetime('2009-11-13 00:00:00') 
      and mydate <= Datetime('2009-11-15 00:00:00')
    

    --편집하다--

    당신은 기본적으로 문자열을 비교한다. 어떤 이유 예상치 못한 동작입니다. 바로 비교하기 전에 기능을 사용하여 날짜로 변환하고 그것을 작동합니다.

  3. ==============================

    3.날짜를 비교할 수 있으려면 이러한 JJJJ-MM-TT 문자열로 SQLite는의 지원 날짜 형식 중 하나에 저장해야합니다. 날짜는 SQLite는 인식되지 않는 지역화 된 날짜 형식 문자열로 저장됩니다.

    날짜를 비교할 수 있으려면 이러한 JJJJ-MM-TT 문자열로 SQLite는의 지원 날짜 형식 중 하나에 저장해야합니다. 날짜는 SQLite는 인식되지 않는 지역화 된 날짜 형식 문자열로 저장됩니다.

    가장 중요한 필드는 문자열의 시작이 아닌 경우, 문자열 비교는 날짜에 대해 작동하지 않습니다. 테이블의 현재 값으로, 당신은 어떤 비교를 할 수 없을 것입니다.

  4. from https://stackoverflow.com/questions/13091000/sqlite-compare-dates by cc-by-sa and MIT license