我的案件在陈述时出了什么问题?

问题描述 投票:0回答:1

背景摘要:我有一个称为有效日期的日期字段,格式为YYYY-MM-DD。我正在创建一个名为Acct_Dt的新日期列,格式为MM-YY。如果我的生效日期为2019-02-20,请大致了解结果。如果该日期的月份和日期介于2019-02-16和2019-03-15之间,则意味着新的Acct_Dt将为03-01。 -DD我正在使用“向右”功能来获取月份和日期。

如果我的生效日期为2019-06-15。如果该日期的月份和日期在2019-05-16和2019-06-15之间,则意味着新的Acct_Dt将为06-01。

我试图在一年中的所有月份(当不包括从2019-12-16到2020-01-15的过渡期都这样做时写一个嵌套的Case语句。我没有为此写逻辑)。

下面的代码:

Select PolicyNumber
,EffectiveDate
,Case When Right(EffectiveDate,5) BETWEEN '01-16' and '02-15' Then Acct_Dt = '-02-01' 
      When Right(EffectiveDate,5) BETWEEN '02-16' and '03-15' Then Acct_Dt = '-03-01'
      When Right(EffectiveDate,5) BETWEEN '03-16' and '04-15' Then Acct_Dt = '-04-01'
      When Right(EffectiveDate,5) BETWEEN '04-16' and '05-15' Then Acct_Dt = '-05-01'
      When Right(EffectiveDate,5) BETWEEN '05-16' and '06-15' Then Acct_Dt = '-06-01'
      When Right(EffectiveDate,5) BETWEEN '06-16' and '07-15' Then Acct_Dt = '-07-01'
      When Right(EffectiveDate,5) BETWEEN '07-16' and '08-15' Then Acct_Dt = '-08-01'
      When Right(EffectiveDate,5) BETWEEN '08-16' and '09-15' Then Acct_Dt = '-09-01'
      When Right(EffectiveDate,5) BETWEEN '09-16' and '10-15' Then Acct_Dt = '-10-01'
      When Right(EffectiveDate,5) BETWEEN '10-16' and '11-15' Then Acct_Dt = '-11-01'
      Else null
    End
FROM dbo.Combined_SS_RateMonitor
ORDER BY Policy_Number
sql sql-server syntax-error case-when
1个回答
1
投票

您为什么在date列上使用字符串逻辑?

select (case when day(EffectiveDate) <= 15
             then dateadd(day, 1 - day(EffectiveDate), EffectiveDate)
             else dateadd(day, 1, eomonth(EffectiveDate))
        end) 
© www.soinside.com 2019 - 2024. All rights reserved.