sqlite выберите с условием на дату

36

У меня есть таблица sqlite с датой рождения. Я хотел бы выполнить запрос, чтобы выбрать те записи, возраст которых превышает 30. Я пробовал следующее, но он не работает:

select * from mytable where dob > '1/Jan/1980'
select * from mytable where dob > '1980-01-01'
Теги:
database
date

3 ответа

53
Лучший ответ

Можно использовать такую ​​вещь:

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');

Если вы используете Sqlite V3.7.12 или выше

Не используйте date(dateofbirth), просто используйте dateofbirth. Таким образом, ваш запрос будет выглядеть так:

select * from customer where dateofbirth < date('now','-30 years');
  • 19
    Все те, кто пришел сюда из Google: теперь он больше не работает с sqlite v3.7.12; не используйте date(dateofbirth) , просто dateofbirth было бы хорошо.
  • 1
    Просто нужно быть осторожным с одной вещью: date(field) > date('2018-05-20') и field > '2018-05-20' возвращают разные результаты для меня, поэтому использование функции date() - единственный способ это работает правильно для меня, если поле не Date, а DateTime .
Показать ещё 1 комментарий
18

Использование магических документов на веб-сайте sqlite:

select * from mytable where dob < date('now','-30 years');
1

Попробуйте написать с использованием формата даты "ГГГГ-ММ-ДД"

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

Более программный способ будет примерно таким:

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

Вам понадобится найти конкретный синтаксис для sqlite.

  • 1
    select * from mytable где dob> '1980-01-01' не работает
  • 3
    Еще в 2010 году select * from mytable where dob > '1980-01-01' может не работать, но в настоящее время эта команда отлично работает на sqlite3 .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню