2015-06-11 2 views
0

Я хотел бы написать запрос SQL Server, который должен получить разницу между двумя датами (т.е. даты доступны в двух столбцах с именем «Дата начала» и «Конец Дата"). Я хотел бы найти разницу между двумя датами в этих двух разных столбцах и обновить в другом столбце как «Истек», если разница равна -1 или ниже. Самое главное: время должно начинаться с указанной даты начала и периодически проверять.Запрос SQL Server для получения разницы между двумя датами в двух разных столбцах

+1

Срок действия истек, как будто это связано с текущим временем, а не временем начала. Вы уверены, что ваши требования в порядке? Кроме того, я бы не добавил никакой логики для обновления, вы можете просто добавить определение для него в предложение select, которое используете –

+1

. Ну, вы еще не опубликовали, что вы пробовали. Начните с [DATEDIFF] (https://msdn.microsoft.com/en-us/library/ms189794 (v = sql.105) .aspx). – Andrew

+0

Что вы подразумеваете под «он должен периодически проверяться»? Вы говорите, что хотите запустить запланированное задание с этим запросом на обновление, например, в качестве самой работы? –

ответ

0

Вы можете использовать DATEDIFF и case when так:

update table set expColumn = case when DATEDIFF(day,start_date,end_date) > 0 
     then 'Expired' end FROM table 

Надеется, что это помогает.

0

Чтобы найти разницу между двумя значениями даты, вы используете функцию DATEDIFF().

Кроме того, в зависимости от ваших требований вы можете установить это в своей таблице как вычисленный столбец. Таким образом, любые изменения столбцов компонента в определении расчетного столбца автоматически обновят вычисляемый столбец, чтобы отразить новые значения.
С помощью ключевого слова PERSISTED вы также можете проиндексировать вычисляемый столбец. Проверьте документацию для получения более подробной информации: https://technet.microsoft.com/en-us/library/ms191250%28v=sql.105%29.aspx

0

Это основано на том, что, как я думаю, вы пытаетесь сделать, это не совсем понятно.

Я не думаю, что вы хотите добавить столбец в свою таблицу, чтобы определить, что истек, потому что этот столбец будет зависеть от столбца «Дата окончания», а также от первичного ключа, который нарушит 3-ей нормальную форму. Это действительно не нужно, потому что вы можете запросить, какие из них истекли в любое время. Я не могу думать о сценарии, где вам нужно будет иметь столбец, который указывает на истечение срока действия. Вы можете создать такой запрос, как упомянутые другие, чтобы отображать (не создавать) другой столбец, который помещает истекшие строки, или вы можете просто отображать только те, которые истекли, или может иметь смысл перемещать их в другую таблицу.

SET IDENTITY_INSERT ExpiredTableName ON 

INSERT INTO ExpiredTableName (Column1, Column2, StartDate, EndDate) 
SELECT * 
FROM TableName 
WHERE DATEDIFF(day, InvoiceDate, '2015-04-20') >0 

Вставка идентичности предназначена только для автогенерированных ключей.

Вы можете запускать свои запросы с регулярными интервалами времени, как уже упоминалось.

Смежные вопросы