zoukankan      html  css  js  c++  java
  • 获取1970-01-01到当前时区时间的时间戳

    根据时间戳转化成格式化时间函数dateadd(),根据表dm_config 中属性param_name='TIMEZONE' 配置时区偏移数,如保存的是服务器时区0时区,需要显示上海(+8)时区,则在这里配置8。

    DECLARE
    p_Interval ALIAS FOR $1;
    p_N ALIAS FOR $2;
    p_Date ALIAS FOR $3;
    v_timezone numeric;
    
    
    BEGIN
     if exists (select 0 from pg_tables where tablename='dm_config') then
       select param_value into v_timezone from dm_config where param_name='TIMEZONE';
          if not found then 
          INSERT INTO dm_config(param_name,param_value) VALUES('TIMEZONE','0');
          end if;
       select param_value into v_timezone from dm_config where param_name='TIMEZONE';
       if (p_Interval = 's' or p_Interval='ss')  then
       return p_Date + p_N*interval'1 second'+v_timezone*3600*interval'1 second';
          elseif p_Interval = 'm' then
          return p_Date + cast(p_N || ' months' as interval);
            elseif p_Interval = 'y' then
            return p_Date + cast(p_N || ' years' as interval);
               else
               raise exception 'dateadd interval parameter not supported';
               return null;
        end if;
     else
       if p_Interval = 's' or p_Interval='ss'  then
       return p_Date + p_N*interval'1 second';
        elseif p_Interval = 'm' then
        return p_Date + cast(p_N || ' months' as interval);
          elseif p_Interval = 'y' then
          return p_Date + cast(p_N || ' years' as interval);
            else
            raise exception 'dateadd interval parameter not supported';
            return null;
       end if;
    end if;
    END;

    获取当前时间戳(当前服务器所在时区) 函数:datediff()

    DECLARE
    arg_mode alias for $1;
    arg_d2 alias for $2;
    arg_d1 alias for $3; 
    
    BEGIN
    if arg_mode = 'ss' or arg_mode = 's' then
    return cast(date_part('epoch',(arg_d1-arg_d2)::interval) as integer);
    elsif arg_mode = 'dd' or arg_mode = 'd' or arg_mode = 'y' or arg_mode =
    'dy' or arg_mode = 'w' then
    return cast(arg_d1 as date) - cast(arg_d2 as date);
    elsif arg_mode = 'ww' then
    return ceil( ( cast(arg_d1 as date) - cast(arg_d2 as date) ) / 7.0);
    elsif arg_mode = 'mm' OR arg_mode = 'm' then
    return 12 * (date_part('year',arg_d1) - date_part('year',arg_d2))
    + date_part('month',arg_d1) - date_part('month',arg_d2)
    + case when date_part('day',arg_d1) >
    date_part('day',arg_d2)
    then 0
    when date_part('day',arg_d1) =
    date_part('day',arg_d2) and cast(arg_d1 as time) >= cast(arg_d2 as time)
    then 0
    else -1
    end;
    elsif arg_mode = 'yy' OR arg_mode = 'y' OR arg_mode = 'yyyy' then
    return (cast(arg_d1 as date) - cast(arg_d2 as date)) / 365;
    end if;
    
    END;

     当前时间函数getdate()。例:2020-11-26 00:50:04.688341

     SELECT LOCALTIMESTAMP as result; 

    sql查询获取

    select datediff('s','1970-1-1',getdate()) as current_time_diff ; -->1606352522

    查看条件时间格式化

    select dateadd('ss', 1606238331, '1970-01-01'); -->2020-11-24 17:18:51

    查看本地时间(电脑所设时区时间)getdate()。

     SELECT LOCALTIMESTAMP as result; -->2020-11-26 00:50:04.688341

  • 相关阅读:
    Beyond Compare 4 过期操作
    python2 批量转 python3
    【JavaScript】为什么javascript是单线程
    Java之花样玩枚举
    OpenSSL
    OpenSSL和OpenSSH以及私有CA的实现
    Python-线程同步
    Zookeeper基础
    pycharm中使用git以及多分支结构
    BZOJ 4771 主席树+倍增+set
  • 原文地址:https://www.cnblogs.com/jdw12306/p/14034733.html
Copyright © 2011-2022 走看看