如何使用case when命令从日期中提取年份?



我编写了一个代码来记录,如果约会发生在1月1日到8月31日,那么它将返回约会的年份,如果是从9月1日到12月31日,那么它将是约会的年份+ 1。日期设置为:1-JAN-2022。

这是我想用的线路。我不太擅长SQl,但这是我应该提取年份的方式,还是我必须在代码的另一部分?

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

感谢您的建议和批评。

这取决于AppointmentDate列的数据类型;看起来是date(根据你使用的extract函数)。如果是这样,那么这进一步取决于您使用的数据库。是甲骨文吗?也许,当你使用Oracle SQL Developer时。

如果是的话,你必须"extract"去掉了列的月和日的值,但不是你做的方式;如果你不知道你在做什么,比较字符串是很棘手的

我不是说这是最好的选项,但是-它可能工作:使用to_char函数,提取月和日(mmdd格式掩码)。注意between是包含,它将接受两个边界。也许你更愿意用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

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

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

最新更新