首页 > 解决方案 > 日期时间的日期修剪

问题描述

我想创建一个带参数 datepart、datevalue 的 Datetrim 函数。它应该从 datevalue (这是一个日期时间)返回一个日期时间,每个日期部分都小于修剪的 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 参数类型相同(我不知道)吗?

还是我只是将其设为 varchar 并在案例中手动编写日期部分?

标签: sqlsql-servertsqldatetime

解决方案


你可以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

推荐阅读