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

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

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

5 ответов

Решение

Некоторые вещи, как это может быть использовано:

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

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

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

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

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

Более программным способом было бы что-то вроде этого:

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

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

выберите * из mytable, где дата (дата)> дата ('1980-01-10')

В QLite3 есть несколько интересных новых функций для работы с датами. На сайте документации вы можете использовать date(), time(), datetime(), julianday(), unixepoch() или strftime() в зависимости от того, как отформатированы данные вашего столбца.

Если вы используете strftime() , как мое предложение ниже, вы должны убедиться, что данные вашего столбца отформатированы так же, как ваша строка strftime.

Вы, вероятно, хотели бы что-то вроде:

SELECT * FROM mytable WHERE dob < strftime("%m/%d/%Y", 'now', '-30 year');

Обратите внимание, что вам, возможно, придется изменить строку формата здесь, чтобы она соответствовала вашей собственной.


И вот код, который я использую лично, чтобы дать вам лучшее представление о том, насколько это мощно. Это позволяет мне получить все заказы за предыдущие 3 месяца, не включая этот месяц.

SELECT * FROM orders WHERE SHIPPEDDATE > strftime('%m/%d/%Y', 'now', 'start of month', '-3 month');

Модификаторы очень мощные с sqlite. Первая строка внутри strftime() — это формат, вторая строка — когда вы хотите начать дату. «Начало месяца» ставит день на 1, а «-3 месяца» возвращает на 3 месяца назад. Так что, если я запустил это сегодня (03.08.2022), дата, которую он использует, будет 01.05.2022.

Другие вопросы по тегам