sql - 我的case when 声明有什么问题?
问题描述
背景总结:我有一个日期字段叫做有效日期,格式是 YYYY-MM-DD。我正在创建一个名为 Acct_Dt 的新日期列,格式为 MM-YY。为了了解结果应该是什么,如果我的生效日期是 2019-02-20。如果该日期的月份和日期介于 2019 年 2 月 16 日和 2019 年 3 月 15 日之间,则意味着新的 Acct_Dt 将为 03-01。将旧日期格式与仅 MM 的新日期格式匹配-DD 我正在使用 Right 函数来获取月份和日期。
如果我的生效日期是 2019-06-15。如果该日期的月份和日期介于 2019-05-16 和 2019-06-15 之间,则意味着新的 Acct_Dt 将为 06-01。
我正在尝试编写一个嵌套的 Case when 语句来为一年中的所有月份执行此操作(不包括 2019-12-16 到 2020-01-15 的过渡。我没有为此编写逻辑)。
下面的代码:
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
解决方案
为什么要在列上使用字符串逻辑date
?
select (case when day(EffectiveDate) <= 15
then dateadd(day, 1 - day(EffectiveDate), EffectiveDate)
else dateadd(day, 1, eomonth(EffectiveDate))
end)
推荐阅读
- python - 关闭 Tkinter 窗口时出现图像问题
- google-colaboratory - 使用 Colab 从云端硬盘文件夹中读取文件
- javascript - 需要修改javascript倒计时代码
- python - 从 lxml 元素获取原始文本?
- python - Python:pop() 方法可以连续工作 3 次吗?
- r - ggplot2:绘制多个值时分组失败
- swiftui - Swiftui如何将带有参数的视图传递给另一个视图,该视图将在调用视图时设置参数
- google-assistant-sdk - AIY授权错误运行voice/assistant_grpc_demo.py
- assembly - 非法指令ARM组装树莓派4
- python - 如何在 Window 8.1 中安装 Visul Studio C++ 14.0