【小计】PostgreSQL实现Oracle的trunc日期函数功能
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,create or replace function trunc(p_timestamp timestamp with time zone, p_formart varchar default 'DD
千家信息网最后更新 2025年01月20日【小计】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安全错误
数据库的锁怎样保障安全
广东软件开发怎么样
甘泉路街道服务器电脑回收上门
移动应用软件开发行业
安卓软件开发与管理工具
DMDW网络技术
xps标准数据库
检查代理服务器配置
猫第一次发服务器视频教程
易班网络安全知识竞赛
数据库关系运算的优先级别
软件开发企业税收案例
电脑软件开发要什么学历
数据库总监一年玩49
国家安全教育 网络安全
英语培训软件开发
软件开发文档分类
阿里 网络安全 面试
sql注入 数据库类型
古籍文献数据库
云服务器做网站
运营游戏的服务器要求
数据库模式是什么
广州大芊蕃鼠网络技术
供水网络安全工作部署
杨轶袂安卓软件开发
腾讯网站服务器在哪里提供
阿里云 网络安全威胁信息
数据库三个模式的优点
还陪咳嗽服务器
塞尔达电脑版怎么切换服务器