#sql #select #time
#sql #выберите #время
Вопрос:
Я хотел бы написать предложение sql, например:
SELECT * FROM table WHERE orderdate < {orderdate three years after};
Я попробовал какую dateadd
-то функцию, но не нашел примера, который соответствовал бы только моим потребностям. Любая помощь?
Комментарии:
1. Вы могли бы просто сделать
select * from table
, потомуORDERDATE
что всегда будет меньше, чемORDERDATE 3 years
?2. @mjgirl — Я думаю, вам нужно добавить больше деталей к вашему вопросу, прежде чем вы получите полезный ответ.
3. Вы имели в виду (a) выбирать заказы, которым более 3 лет? Или это должны быть (b) заказы, которые более чем на 3 года старше последнего заказа в таблице?
Ответ №1:
Если вы используете SQL Server:
... WHERE orderdate < DATEADD(year, 3, orderdate)
Документация и примеры здесь: http://msdn.microsoft.com/en-us/library/ms186819.aspx
Возможно, я неправильно понял ваш вопрос, но, как прокомментировал Конерак, это кажется бессмысленным запросом.
Комментарии:
1. org.springframework.dao. Исключение TransientDataAccessResourceException: PreparedStatementCallback; SQL [выберите * из db_orders, где order_date < DATEADD(год, 3, order_date]; Индекс параметра вне диапазона (1> количество параметров, которое равно 0).; вложенным исключением является java.sql.SQLException: индекс параметра вне диапазона (1> количество параметров, которое равно 0).
2. @mjgirl — У вас нет закрывающей скобки для
DATEADD
функции.3. Нет бессмысленного… цель состоит в том, чтобы получить строки истекших заказов, а срок действия заказа истекает через определенные годы после даты заказа.
4. @mjgirl — Если это так, вы не хотите сравнивать дату заказа с самой собой, а с текущей датой:
SELECT * FROM db_orders WHERE CURRENT_TIMESTAMP > DATEADD(year, 3, order_date)
5. @mjgirl — Вы тестировали запрос в базе данных с помощью Management Studio? Если запрос работает и возвращает ожидаемые строки, то ваша проблема теперь в вашем Java-коде, для чего вам придется опубликовать новый вопрос 😉
Ответ №2:
В MySQL
select * from table
where orderdate < DATEADD(NOW(),INTERVAL 3 YEARS)
Комментарии:
1. Разве это не добавляет годы к текущей дате?
2. ДА. Вы должны лучше объяснить, что вы хотите: в вашем вопросе запрашивается orderdate.. любое число меньше числа 3 … смотрите мой первый комментарий к вашему вопросу.