我有这个sql语句:
SELECT Geburtsdatum FROM Kunde WHERE Geburtsdatum BETWEEN '1993-01-01' AND '2000-01-01'
但我得到一些奇怪的结果,如: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) )
从文档:
sqlite does not have a storage class set aside for storing dates and/or times.
所以你的列不是完全存储为一个日期.进一步阅读,我们了解到指定为DATE的列实际上使用关联规则5存储为NUMERIC.
回到第1.2节:
REAL as Julian day numbers,the number of days since noon in Greenwich on November 24,4714 B.C. according to the proleptic Gregorian calendar.
好.所以让我们试试:
SELECT Geburtsdatum FROM Kunde WHERE Geburtsdatum BETWEEN julianday('1993-01-01') AND julianday('2000-01-01');
奇怪的是,SQL Fiddle似乎将DATE存储为字符串,上述方法不起作用.在这种情况下,应该:
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');