代码之家  ›  专栏  ›  技术社区  ›  George Menoutis

datetimes的Datetrim

  •  1
  • George Menoutis  · 技术社区  · 6 年前

    我想用参数datepart,datevalue创建一个Datetrim函数。它应该返回一个datetime from datevalue(这是一个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上的一个case,包含所有可能的dateadd-datediff组合。问题是,我能让我的datepart参数与dateadd/datediff函数的datepart参数的类型相同吗?

    或者我只是把它变成一个varchar并在case中手动编写dateparts?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Squirrel    6 年前

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