我有这个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)
| 归档时间: |
|
| 查看次数: |
29978 次 |
| 最近记录: |