SQLite比较日期

Chr*_*ler 13 sql sqlite date

我有这个SQL语句:

SELECT Geburtsdatum FROM Kunde
WHERE Geburtsdatum BETWEEN '1993-01-01' AND '2000-01-01'
Run Code Online (Sandbox Code Playgroud)

但我得到一些奇怪的结果,如:2.02.1990

'Geburtsdatum'是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) )
Run Code Online (Sandbox Code Playgroud)

lc.*_*lc. 19

从文档:

SQLite没有为存储日期和/或时间而预留的存储类.

因此,您的列并未完全存储为日期.进一步阅读,我们了解到指定的列DATE实际上存储为NUMERIC使用关联性规则5.

回到1.2节:

真实如朱利安日数,根据公历4714年11月24日格林威治中午以来的天数.

好.所以让我们试试:

SELECT Geburtsdatum FROM Kunde
WHERE Geburtsdatum 
    BETWEEN julianday('1993-01-01') AND julianday('2000-01-01'); 
Run Code Online (Sandbox Code Playgroud)

奇怪的是,SQL Fiddle似乎将DATEs 存储为字符串,而上述操作无效.在这种情况下,应该:

SELECT Geburtsdatum FROM Kunde
WHERE date(Geburtsdatum)
    BETWEEN date('1993-01-01') AND date('2000-01-01'); 
Run Code Online (Sandbox Code Playgroud)

此外,在您的情况下,您似乎得到一些奇怪的(读取:本地化)格式返回.我想知道它是否真的是你的情况下的字符串,只是使用不同的格式.你可以尝试:

SELECT Geburtsdatum FROM Kunde
WHERE strftime('%d.%m.%Y', Geburtsdatum)
    BETWEEN date('1993-01-01') AND date('2000-01-01'); 
Run Code Online (Sandbox Code Playgroud)