excel中DATE(year,month,day)函数——oracle自定义函数

这篇博客介绍了如何在Oracle中创建自定义函数,模拟Excel中的DATE函数逻辑。DATE函数接受年、月、日参数,根据不同的年份范围转换为实际日期。文章详细解析了Excel日期系统的理解,并提供了Oracle实现此功能的代码示例。
摘要由CSDN通过智能技术生成

@oracle自定义函数写excel中DATE函数

oracle自定义函数写excel中DATE函数

EXCEL中DATE函数逻辑为DATE(year,month,day)
含义:DATE(年,月,日)

EXCEL理解逻辑如下:

  1. Year 参数的值可以包含一到四位数字。Excel 将根据计算机正在使用的日期系统来解释 year 参数。默认情况下,Microsoft Excel for Windows 使用的是 1900 日期系统,这表示第一个日期为 1900 年 1 月 1 日。
    • 如果 year 介于 0(零)到 1899 之间(包含这两个值),则 Excel 会将该值与 1900 相加来计算年份。例如,DATE(108,1,2) 返回 2008 年 1 月 2 日 (1900+108)。
    • 如果 year 介于 1900 到 9999 之间(包含这两个值),则 Excel 将使用该数值作为年份。例如,DATE(2017,12,5) 将返回 2017 年 12月 5日。
    • 如果 year 小于 0 或大于等于 10000,则 Excel 返回 错误值 #NUM!。
  2. Month 一个正整数或负整数,表示一年中从 1 月至 12 月(一月到十二月)的各个月。
    • 如果 month 大于 12,则 month 会从指定年份的第一个月开始加上该月份数。例如,DATE(2016,14,2) 返回表示 2017 年 2 月 2 日的序列数。
    • 如果 month 小于 1,则 month 会从指定年份的第一个月开始减去该月份数,然后再加上 1 个月。例如,DATE(207,-3,2) 返回表示 2016 年 9 月 2 日的序列号。
  3. Day 一个正整数或负整数,表示一月中从 1 日到 31 日的各天。
    • 如果 day 大于指定月中的天数,则 day 会从该月的第一天开始加上该天数。例如,DATE(2017,1,35) 返回表示 2017 年 2 月 4 日的序列数。
    • 如果 day 小于 1,则 day 从指定月份的第一天开始减去该天数,然后再加上 1 天。例如,DATE(2017,1,-15) 返回表示 2016 年 12 月 16 日的序列号。

ORACLE自定义函数代码如下:

--创建函数
create or replace function term_date(year_p  number,
                                     month_p number,
                                     day_p   number) return date is
  term date;
  --excel中的date(year,month,day)的逻辑,转化成函数
begin
  --判断年份
  --如果年份在0-1899之间,则使用1900与年份相加
  if year_p >= '0' and year_p <= '1899' then
    --如果月份大于12,则从该年的1月份开始加月份,并且将本身的月份减1
    --如果月份小于1,则从该年的1月份开始减月份,并且将本身的月份减1
    if month_p > 12 or month_p < 1 then
      --如果天数大于指定月份的天数,则从该月1号开始,加天数
      --如果天数小于1,则从该月1号开始,减天数
      if day_p > to_char(last_day(ADD_MONTHS(to_date(to_char(1900 + year_p) || '-' ||
                                                     to_char(1),
     
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

活出别致的高傲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值