【小计】PostgreSQL实现甲骨文的trunc日期函数功能

  


create 或是replace  function  trunc (p_timestamp  timestamp  with  time 区,p_formart  varchar  default ‘弟弟’)   ,returns  timestamp  without  time  zone    $ $   声明   ,v_timestamp  timestamp :=,空;   ,v_formart  varchar(10),:=,上层(p_formart);   开始   ,/*   ,*函数功能:对日期值进行格式化   *大敌;参数说明:   ,*,,P_TIMESTAMP (,需要格式话的日期值,)   ,*,,P_FORMART , (, YYYY:年第一天;,MM | |月MON | RM:月第一天,,,空| DD:当日;,D:当前周第一天,,,....)   ,*返回格式:YYYY-MM-DD  HH24 (12): MI: SS (具体值由第二个参数决定)   ,*/,if  p_timestamp  is  not  null 然后   if 才能;v_formart 拷贝(“YYYY”,“年”),然后   ,,,,当前年的第一天(YYYY-01-01 就是)   ,,v_timestamp :=, date_trunc(‘年’,,p_timestamp);   elsif 才能;v_formart 拷贝(“月”,“星期一”,,“毫米”,,“RM”),然后   ,,,,当前月第一天(YYYY-MM-01 就是)   ,,v_timestamp :=, date_trunc(‘月’,,p_timestamp);   elsif 才能;v_formart 拷贝(‘弟弟’,‘天’,,“DY”),然后   ,,,,当天(YYYY-MM-DD 就是)   ,,v_timestamp :=, date_trunc(‘天’,,p_timestamp);   elsif 才能;v_formart =' D ',然后   ,,,,当前周第一天(周日为第一天)(YYYY-MM-DD 就是)   ,,v_timestamp :=, (date_trunc(‘周’,,p_timestamp),安康;区间,1天);   elsif 才能;v_formart 拷贝(W1,,那,,“W3”,“W4”,“W5”,,“将”,“支W7”),然后   ,,,,当前周第几天(周日为第一天)(YYYY-MM-DD 就是)   ,,v_timestamp :=, date_trunc(‘周’,,p_timestamp):: date  +, substr (v_formart,, 2,, 1):: integer 作用;2;   elsif 才能;v_formart  ~,”D \ + ^ ? [0 - 9] * $’,   ,,,,当年第几天(YYYY-MM-DD 就是)   ,,if  substr (v_formart,, 2,,长度(v_formart) 1):: integer 结构;1,以及366年,   ,,,v_timestamp :=, date_trunc(‘年’,,p_timestamp):: date  +, substr (v_formart,, 2,,长度(v_formart) 1):: integer 作用;1;   ,,,if  date_trunc(‘年’,,v_timestamp):: date 祝辞,date_trunc(‘年’,,p_timestamp):: date 然后   ,,,,v_timestamp :=, date_trunc(‘年’,v_timestamp):: date 作用;间隔1,一天的;   ,,,最终获得;如果;   其他的,,   ,,,raise  exception “u - 2001, [%], is  not 识别只please  enter “D (1 ~ 366)”,, p_formart;   ,才能最终获得;如果;   elsif 才能;v_formart 拷贝(HH,,“HH24”),然后   ,,v_timestamp :=, date_trunc(“小时”,p_timestamp);   elsif 才能;v_formart =' HH12 ',然后   ,,v_timestamp :=, to_char (p_timestamp, yyyy-mm-dd  hh22:00:00)::时间戳;   elsif 才能;v_formart 拷贝(“分钟”,“小姐”),然后   ,,v_timestamp :=, date_trunc(“一分钟”,,p_timestamp);   elsif 才能;v_formart =癈C”,然后   ,,v_timestamp :=, to_date ((trunc (date_part(‘年’,,p_timestamp)::整数/100)* 100 + 1)::varchar、,“yyyy”);   elsif 才能;v_formart 拷贝(“帮助”,“?”),然后   ,,raise  exception “u - 2001, please  enter  formart  code 拷贝(,YYYY |年,月| |我的|毫米RM,, DD | | DY,, D, W (1 ~ 7), D (1 ~ 366), HH | HH24,, HH12,,分钟| MI,, CC )”;   其他的才能   ,,raise  exception “u - 2001, [%], is  not 识别只你还要try (帮助)的,,p_formart;   最终获得才能;如果;   其他的,   v_timestamp 才能;:=,p_timestamp;   ,最终获得;如果;   ,return  v_timestamp;   结束;   $ $   ,language  plpgsql;      ,   ——,测试数据   select  trunc(当前日期,D360),, trunc(当前日期,,' D '), trunc(当前日期,,W1);


【小计】PostgreSQL实现甲骨文的trunc日期函数功能