2010-02-22 16 views
36

Mam tabela sqlite z datą urodzenia. Chciałbym wykonać zapytanie, aby wybrać te rekordy, w których wiek wynosi ponad 30. Próbowałem następujących, ale to nie działa:sqlite wybierz z warunkiem na datę

select * from mytable where dob > '1/Jan/1980' 
select * from mytable where dob > '1980-01-01' 

Odpowiedz

56

Niektóre rzeczy jak to może być używane:

select dateofbirth from customer Where DateofBirth BETWEEN date('1004-01-01') AND date('1980-12-31'); 
select dateofbirth from customer where date(dateofbirth)>date('1980-12-01'); 
select * from customer where date(dateofbirth) < date('now','-30 years'); 

Jeśli używasz SQLite V3.7.12 lub większą

nie używaj date(dateofbirth) wystarczy użyć dateofbirth. Więc zapytanie będzie wyglądać następująco:

select * from customer where dateofbirth < date('now','-30 years'); 
+18

Wszyscy, którzy przychodzą tutaj z google: teraz to już nie działa z sqlite v3.7.12; nie używaj 'date (dateofbirth)', wystarczy 'dateofbirth' byłoby dobre. – wecing

2

Spróbuj napisać stosując format daty „YYYY-MM DD”

select * from mytable where dob > '1980-01-01' 

bardziej programic sposobem byłoby coś takiego:

select * from mytable where datediff(dob, now()) > 30 

trzeba znaleźć konkretne składnię SQLite.

+0

select * from MyTable gdzie dob> '01.01.1980' nie działa – Thunder

+2

Powrót w 2010 roku 'select * from mytable gdzie dob> '1980-01-01'' może nie działać, ale obecnie to polecenie działa doskonale na' sqlite3'. – Shane

+1

Zgadzam się, w "sqlite3" to działa dobrze. –

19

Korzystanie magiczne docs na the sqlite website:

select * from mytable where dob < date('now','-30 years'); 
Powiązane problemy