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