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.
В 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.