如果是任何其他日期,请将日期值替换为该月的第一天

时间:2017-01-05 07:06:24

标签: sql sql-server date

我需要一个日期栏 条件:如果日期列值是除了当月1日之外的任何日期,那么同样必须替换为该月的第1天,例如今天它的05-01-2017,它有将被01-01-2017取代。同样地,这个月的第15个月。

我使用以下查询实现了相同的目标:

select 'date column',
    case when datediff(DAY,-15, 'date column') != 41043 then 
             DATEADD(dd,-(DAY( 'date column')-1), 'date column')
         end 
from TABLE

我通过运行以下查询破解了这个问题:

select datediff(DAY,-15,'date column') 
from TABLE

这会提供值“41043”,我在查询中使用了这个值。

但我有两个问题

  1. 这个值是什么“41043” ??比如该日期的ASCII值或从SQL开始日期减去日期..etc ..
  2. 还有其他更简单的方式来实现我的查询吗?
  3. 请建议。

2 个答案:

答案 0 :(得分:2)

如果不使用CASE,还有一种更简单的方法,您可以随时添加16天(31天的月份),然后找到first day of the month,如下所示:

SELECT 
    DATEADD(month, DATEDIFF(month, 0, DATEADD(DAY, 16, dateColumn)), 0) AS firstDayOfMonth
FROM
    yourTable;

答案 1 :(得分:1)

SELECT
    'date column'
    ,CASE
        WHEN  DATEPART(DAY, 'date column') < 15 THEN 
            CONVERT(VARCHAR(10), DATEADD(mm, DATEDIFF(mm, 0, 'date column'), 0), 105)
        WHEN  DATEPART(DAY, 'date column') >= 15 THEN
            CONVERT(VARCHAR(10), DATEADD(mm, DATEDIFF(mm, 0, 'date column'), 14), 105) 
     END
FROM    
    [TABLE]