【小计】PostgreSQL实现Oracle的trunc日期函数功能
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,create or replace function trunc(p_timestamp timestamp with time zone, p_formart varchar default 'DD
千家信息网最后更新 2025年11月07日【小计】PostgreSQL实现Oracle的trunc日期函数功能
create or replace function trunc(p_timestamp timestamp with time zone, p_formart varchar default 'DD') returns timestamp without time zone as$$declare v_timestamp timestamp := null; v_formart varchar(10) := upper(p_formart);begin /* * 函数功能:对日期值进行格式化 * 参数说明: * P_TIMESTAMP ( 需要格式话的日期值 ) * P_FORMART ( YYYY:年第一天; MM|MONTH|MON|RM:月第一天; NULL|DD:当日; D:当前周第一天; ....) * 返回格式:YYYY-MM-DD HH24(12):MI:SS (具体值由第二个参数决定) */ if p_timestamp is not null then if v_formart in ('YYYY', 'YEAR') then -- 当前年的第一天(YYYY-01-01 00:00:00) v_timestamp := date_trunc('year', p_timestamp); elsif v_formart in ('MONTH', 'MON', 'MM', 'RM') then -- 当前月第一天(YYYY-MM-01 00:00:00) v_timestamp := date_trunc('month', p_timestamp); elsif v_formart in ('DD', 'DAY', 'DY') then -- 当天(YYYY-MM-DD 00:00:00) v_timestamp := date_trunc('day', p_timestamp); elsif v_formart = 'D' then -- 当前周第一天[周日为第一天](YYYY-MM-DD 00:00:00) v_timestamp := (date_trunc('WEEK', p_timestamp) - interval'1 day'); elsif v_formart in ('W1', 'W2', 'W3', 'W4', 'W5', 'W6', 'W7') then -- 当前周第几天[周日为第一天](YYYY-MM-DD 00:00:00) v_timestamp := date_trunc('WEEK', p_timestamp)::date + substr(v_formart, 2, 1)::integer - 2; elsif v_formart ~ '^D\+?[0-9]*$' then -- 当年第几天(YYYY-MM-DD 00:00:00) if substr(v_formart, 2, length(v_formart)-1)::integer between 1 and 366 then v_timestamp := date_trunc('year', p_timestamp)::date + substr(v_formart, 2, length(v_formart)-1)::integer - 1; if date_trunc('year', v_timestamp)::date > date_trunc('year', p_timestamp)::date then v_timestamp := date_trunc('year', v_timestamp)::date - interval'1 day'; end if; else raise exception 'U-2001 [%] is not recognize. please enter "D[1~366]"', p_formart; end if; elsif v_formart in ('HH', 'HH24') then v_timestamp := date_trunc('hour', p_timestamp); elsif v_formart = 'HH12' then v_timestamp := to_char(p_timestamp, 'yyyy-mm-dd hh22:00:00')::timestamp; elsif v_formart in ('MINUTE', 'MI') then v_timestamp := date_trunc('minute', p_timestamp); elsif v_formart = 'CC' then v_timestamp := to_date((trunc(date_part('years', p_timestamp)::integer/100)*100+1)::varchar, 'yyyy'); elsif v_formart in ('HELP', '?') then raise exception 'U-2001 please enter formart code in ( YYYY|YEAR, MONTH|MON|MM|RM, DD|DAY|DY, D, W[1~7], D[1~366], HH|HH24, HH12, MINUTE|MI, CC )'; else raise exception 'U-2001 [%] is not recognize. you can try [help]', p_formart; end if; else v_timestamp := p_timestamp; end if; return v_timestamp;end;$$ language plpgsql; -- 测试数据select trunc(current_date, 'D360'), trunc(current_date, 'D'),trunc(current_date, 'W1');
格式
日期
参数
年第
函数
功能
数据
测试
小计
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
长春智能网络技术口碑推荐
揭阳无线软件开发报价行情
学位论文全文数据库
圆满完成网络安全周宣传
湖南手机软件开发技术
北京打造互联网科技有限公司
e5服务器与e3服务器
融资融券软件开发信息
it网络安全公司成长史
html部署到服务器
镇江云主机服务器厂家直供
小新探街网络安全
汽车网络安全技术研究现状
国内免费的代理服务器
怎么开启数据库的binlog
网络安全相关核心基础专利
数据库物理结构是什么
华为云服务器是否安全
落实网络安全责任制情况汇报
互联网科技站
网络服务器的温度
最近很火的新闻服务器
怎么开启数据库的binlog
数据库截取时间
南京瑞特网络技术有限公司
cors数据库
下面()是FTP服务器地址
韩国服务器cf下载
教育部青少年网络安全工作
施耐德网络安全问题