Я хотел бы написать запрос SQL Server, который должен получить разницу между двумя датами (т.е. даты доступны в двух столбцах с именем «Дата начала» и «Конец Дата"). Я хотел бы найти разницу между двумя датами в этих двух разных столбцах и обновить в другом столбце как «Истек», если разница равна -1 или ниже. Самое главное: время должно начинаться с указанной даты начала и периодически проверять.Запрос SQL Server для получения разницы между двумя датами в двух разных столбцах
ответ
Вы можете использовать DATEDIFF и case when
так:
update table set expColumn = case when DATEDIFF(day,start_date,end_date) > 0
then 'Expired' end FROM table
Надеется, что это помогает.
Чтобы найти разницу между двумя значениями даты, вы используете функцию DATEDIFF().
Кроме того, в зависимости от ваших требований вы можете установить это в своей таблице как вычисленный столбец. Таким образом, любые изменения столбцов компонента в определении расчетного столбца автоматически обновят вычисляемый столбец, чтобы отразить новые значения.
С помощью ключевого слова PERSISTED вы также можете проиндексировать вычисляемый столбец. Проверьте документацию для получения более подробной информации: https://technet.microsoft.com/en-us/library/ms191250%28v=sql.105%29.aspx
Это основано на том, что, как я думаю, вы пытаетесь сделать, это не совсем понятно.
Я не думаю, что вы хотите добавить столбец в свою таблицу, чтобы определить, что истек, потому что этот столбец будет зависеть от столбца «Дата окончания», а также от первичного ключа, который нарушит 3-ей нормальную форму. Это действительно не нужно, потому что вы можете запросить, какие из них истекли в любое время. Я не могу думать о сценарии, где вам нужно будет иметь столбец, который указывает на истечение срока действия. Вы можете создать такой запрос, как упомянутые другие, чтобы отображать (не создавать) другой столбец, который помещает истекшие строки, или вы можете просто отображать только те, которые истекли, или может иметь смысл перемещать их в другую таблицу.
SET IDENTITY_INSERT ExpiredTableName ON
INSERT INTO ExpiredTableName (Column1, Column2, StartDate, EndDate)
SELECT *
FROM TableName
WHERE DATEDIFF(day, InvoiceDate, '2015-04-20') >0
Вставка идентичности предназначена только для автогенерированных ключей.
Вы можете запускать свои запросы с регулярными интервалами времени, как уже упоминалось.
- 1. SQL Server - подсчет разницы между двумя датами
- 2. Расчет разницы между двумя датами в SQL Server и DB2
- 3. Расчет разницы между двумя датами
- 4. Вычисление разницы между двумя датами
- 5. sql запрос для получения данных между двумя датами
- 6. SQL-запрос для получения списка месяцев между двумя датами
- 7. получение разницы между двумя датами
- 8. Мой запрос sql для получения данных между двумя конкретными датами
- 9. SQL-запрос для разницы между двумя таблицами
- 10. вычисления разницы между двумя датами
- 11. Нахождение разницы между двумя датами
- 12. разницы дней между двумя датами
- 13. sql запрос для вычисления разницы между двумя датами разных столбцов и соседних рядов
- 14. sql запрос разница между двумя датами
- 15. разницы в годах между двумя датами
- 16. Получение разницы между двумя датами в днях
- 17. дней между двумя датами в SQL Server
- 18. Запрос Между двумя датами
- 19. SQL Server Найти запись между двумя датами
- 20. Вычисление разницы между двумя датами в днях
- 21. SQL Server выберите разницу между двумя датами
- 22. Нахождение разницы в днях между двумя датами
- 23. Нахождение разницы между двумя датами в xslt
- 24. Разница между двумя датами из двух последовательных строк в двух разных столбцах
- 25. Выберите записи между двумя датами в двух столбцах
- 26. Построение sql-запроса для получения записей между двумя датами
- 27. SQL Server: данные между двумя датами
- 28. SQL Server: заполнение строк между двумя датами
- 29. Улучшить алгоритм расчета разницы между двумя датами
- 30. SQL Server: поиск записей между двумя датами
Срок действия истек, как будто это связано с текущим временем, а не временем начала. Вы уверены, что ваши требования в порядке? Кроме того, я бы не добавил никакой логики для обновления, вы можете просто добавить определение для него в предложение select, которое используете –
. Ну, вы еще не опубликовали, что вы пробовали. Начните с [DATEDIFF] (https://msdn.microsoft.com/en-us/library/ms189794 (v = sql.105) .aspx). – Andrew
Что вы подразумеваете под «он должен периодически проверяться»? Вы говорите, что хотите запустить запланированное задание с этим запросом на обновление, например, в качестве самой работы? –