oracle 在使用case when命令时,如何从日期中提取年份

4szc88ey  于 2023-10-16  发布在  Oracle
关注(0)|答案(2)|浏览(149)

我做了一个代码来记录如果约会发生在1月1日到8月31日,那么它会返回约会的年份,如果是从9月1日到12月31日,它会是约会的年份+ 1。日期设置如下:2022年1月1日。
这是我想用的台词。我不太擅长SQL,但这是我应该提取年份的方式吗?还是我必须在代码的另一部分中进行提取?

case when "AppointmentDate" BETWEEN '1-SEP' AND '31-DEC' then EXTRACT(YEAR from "AppointmentDate" + 1) else (YEAR FROM "AppointmentDate") END "Years",

感谢您提前提出的任何建议或批评。

wlwcrazw

wlwcrazw1#

这取决于AppointmentDate列的数据类型;它看起来像是date(根据您使用的extract函数)。如果是这样,那么它进一步取决于您使用的数据库。是Oracle吗?也许,当你使用Oracle SQL Developer。
如果是这样的话,您必须从列的值中“提取”月和日,但不是您所做的方式;如果你不知道你在做什么,字符串是很难比较的。
我不是说这是最好的选择,但是-它可能会工作:使用to_char函数,提取月份和日期(mmdd掩码)。请注意,betweeninclusive,它将接受两个边界。也许你更愿意使用between '0101' and '0831'

SELECT CASE
          WHEN TO_CHAR ("AppointmentDate", 'mmdd') BETWEEN '0101' AND '0901'
          THEN
             EXTRACT (YEAR FROM "AppointmentDate") + 1
          ELSE
             EXTRACT (YEAR FROM "AppointmentDate")
       END "Years"
  FROM your_table
lg40wkob

lg40wkob2#

您可以添加四个月并完全免除case

extract(year from add_months(appointment_date, 4)) as the_year

相关问题