我想创建一个带有参数datepart,datevalue的Datetrim函数。它应从datevalue(它是一个datetime)返回一个datetime,该日期的每个日期部分都小于被修剪的datepart参数。
例如:
(year,'20180703 11:32:45.333')
应该返回20180101 00:00:00.000
(month,'20180703 11:32:45.333')
应该返回20180701 00:00:00.000
我想在datepart上使用所有可能的dateadd-datediff组合都是正文的代码。问题是,我的datepart参数是否可以与dateadd / datediff函数的datepart参数类型相同(我对atm未知)?
还是我只是将其设为varchar并在情况下手动编写日期部分?
答案 0 :(得分:0)
您可以将dateadd()
与datediff()
一起使用,如下所示
declare @dt datetime = '20180703 11:32:45.333',
@flag int = 1
select dateadd(year, datediff(year, 0, @dt), 0) as [Year],
dateadd(month, datediff(month, 0, @dt), 0) as [Month],
case @flag
when 1 then dateadd(year, datediff(year, 0, @dt), 0)
when 2 then dateadd(month, datediff(month, 0, @dt), 0)
end