псевдокод, чтобы попытаться продемонстрировать перемещение операторов набора для выбора операторов
declare @begin date = '2018-01-01'
declare @end date = '2019-01-01'
declare @middletest int = datediff("dd", @begin, @end)/2
declare @middledate date = dateadd("dd", @middletest, @begin)
declare @middlemonth int = month(@middledate)
select @middlemonth half_month, @middledate middle_date
-- ,other_columns here
from table
where something
Начать замену.@middlemonth находится в операторе выбора, поэтому замените его на месяц (@middledate).
declare @begin date = '2018-01-01'
declare @end date = '2019-01-01'
declare @middletest int = datediff("dd", @begin, @end)/2
declare @middledate date = dateadd("dd", @middletest, @begin)
select month(@middledate) half_month, @middledate middle_date
-- ,other_columns here
from table
where something
@ middledate теперь находится в операторе выбора в 2 местах, поэтому замените его на dateadd ("dd", @middletest,@begin) каждый раз.
declare @begin date = '2018-01-01'
declare @end date = '2019-01-01'
declare @middletest int = datediff("dd", @begin, @end)/2
select month(dateadd("dd", @middletest, @begin)) half_month,
dateadd("dd", @middletest, @begin) middle_date
-- ,other_columns here
from table
where something
Продолжайте.
declare @begin date = '2018-01-01'
declare @end date = '2019-01-01'
select month(dateadd("dd", datediff("dd", @begin, @end)/2, @begin)) half_month,
dateadd("dd", datediff("dd", @begin, @end)/2, @begin) middle_date
-- ,other_columns here
from table
where something
И вы можете, по желанию, заменить вещи значениями из таблицы.Если в таблице есть столбец start_date, и вы хотите, чтобы он был началом, а затем используйте текущую дату в качестве конца:
select month(dateadd("dd", datediff("dd", start_date, getdate())/2, start_date)) half_month,
dateadd("dd", datediff("dd", start_date, getdate())/2, start_date) middle_date
-- ,other_columns here
from table
where something