GBase 8s获取第几周、第几天的函数

Oracle数据库中获取某个日期是当年的第几周、当月的第几周、当年的第几天均可以使用to_char来获取。

to_char(sysdate,'WW');    -- 当年第几周,以01-01 至 01-07为第一周
to_char(sysdate,'W');     -- 当月第几周,以01 至 07为第一周
to_char(sysdate,'DDD');   -- 当年第几天,以01-01 为 001

GBase 8s的to_char尚未实际该功能,因此需要使用自定义函数来实现,具体如下:
当年的第几周

drop function if exists weekofyear(datetime year to second);
-- day of year, first week is 01-01 ~ 01-07
create function weekofyear(p_datetime datetime year to second) returns int with (not variant);
  return trunc(1 + (p_datetime - TRUNC(p_datetime, 'YEAR')) / 7);
end function;

当月的第几周

drop function if exists weekofmonth(datetime year to second);
-- day of month, first week is 01~07
create function weekofmonth(p_datetime datetime year to second) returns int with (not variant);
  return trunc(1 + (p_datetime - TRUNC(p_datetime, 'MONTH')) / 7);
end function;

当年的第几天

drop function if exists dayofyear(datetime year to second);
-- day of year
create function dayofyear(p_datetime datetime year to second) returns int with (not variant);
  return trunc(1 + (p_datetime - TRUNC(p_datetime, 'YEAR')));
end function;

注:当年的第几天,返回的是数值型,如果要跟oracle的一致的三字符返回,可改为:

drop function if exists dayofyear(datetime year to second);
-- day of year, return char(3)
create function dayofyear(p_datetime datetime year to second) returns char(3) with (not variant);
  return lpad(trunc(1 + (p_datetime - TRUNC(p_datetime, 'YEAR'))),3,'0');
end function;

以上,对于日期的处理均使用到了trunc()函数,对于trunc()函数的用法,请参考:https://blog.csdn.net/liaosnet/article/details/106080012

标签: GBase, 日期函数, trunc, weekofyear

添加新评论