написание предложения select со временем

#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 … смотрите мой первый комментарий к вашему вопросу.