注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

星期五

明天不上班

 
 
 

日志

 
 
关于我

一个特立独行的Java程序员,比较宅,上上网,写博客,听音乐,看电影。

网易考拉推荐

Postgresql 生成测试数据3  

2011-12-28 20:44:33|  分类: Postgresql |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

因为后台SQL查询是通过time_stamp_gmt查询结果,所以需要生成time_stamp_gmt时间。
什么是时间戳 ?
http://baike.baidu.com/view/354827.htm

查询postgreSQL所有时间函数都没有发现timestamp转gmt的方法
所以就自己写了一个:这里主要用到两个方法 date_part 和 age方法
函数 返回类型 描述 例子 结果
age(timestamp, timestamp) interval 减去参数后的"符号化"结果 age(timestamp '2001-04-10', timestamp '1957-06-13') 43 years 9 mons 27 days
age(timestamp) interval current_date 减去参数后的结果 age(timestamp '1957-06-13') 43 years 8 mons 3 days
date_part(text, timestamp) double precision 获取子域(等效于 extract);又见节9.9.1 date_part('hour', timestamp '2001-02-16 20:38:40') 20
date_part(text, interval) double precision 获取子域(等效于 extract);又见节9.9.1 date_part('month', interval '2 years 3 months') 3

/*

一些测试例子

select (now() - timestamp '1970-01-01 00:00:00+00');
select date_part('day',(now() - timestamp '1970-01-01 00:00:00+00'));
select date_part('hour',(now() - timestamp '1970-01-01 00:00:00+00'));
select date_part('minute',(now() - timestamp '1970-01-01 00:00:00+00'));
select date_part('second',(now() - timestamp '1970-01-01 00:00:00+00'));
select date_part('timezone',now());
*/

CREATE OR REPLACE FUNCTION to_time_stamp_gmt(IN time_stamp timestamp,IN time_zone int)
RETURNS bigint AS
$$
DECLARE
time bigint := 0;
day bigint := 0;
hour bigint := 0;
minute bigint := 0;
millisecond bigint :=0;
BEGIN
day := date_part('day',(time_stamp - timestamp '1970-01-01 00:00:00+00'))::bigint;
hour := date_part('hour',(time_stamp - timestamp '1970-01-01 00:00:00+00'))::bigint;
minute := date_part('minute',(time_stamp - timestamp '1970-01-01 00:00:00+00'))::bigint;
millisecond := date_part('second',(time_stamp - timestamp '1970-01-01 00:00:00+00'))::bigint * 1000;
--减去所在时区 (因为Pl/pgSQL 不支持 date_part('timezone',time_stamp)) 所以需要多加一个参数
time := day*24*60*60*1000 + hour*60*60*1000 + minute*60*1000 + millisecond - time_zone*60*60*1000;
raise notice '%',time;

return time;
END;
$$
LANGUAGE 'plpgsql';

使用方法 两个参数
1.第一个是time_stamp
2.第二个是你时间的时区 (这主要是因为Pl/pgSQL 不支持 date_part('time_zone', time_stamp)))
postgres=# select to_time_stamp_gmt(timestamp '2010-10-11 23:22:55', 8);
1286810575000
Postgresql 生成测试数据3 - 星期五 - 星期五


使用Eclipse Java程序验证一把

package com.hjzheng.general.sql;

import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class GeneralSQL {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = sdf.parse("2010-10-11 23:22:55");
System.out.println(d.getTime());
}
}

结果相同 1286810575000

下一步就是把该函数加入上一篇中的函数中。
  评论这张
 
阅读(280)| 评论(0)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017