最近数据库架构调整,一部分业务从MySQL迁移到GreenPlum上去,原来MySQL中自带有unix_timestamp和from_unixtime两个函数可以实现标准时间和UNIX时间的相互转换,翻了下GreenPlun的文档,没有发现有类似的函数,于是便使用python自定义了这两个函数,并在这两个函数的基础上实现了两个业务相关的函数,这里记录一下。

1、首先创建一个python language。
testdb=# create language plpythonu;
CREATE LANGUAGE

2、创建unix_timestamp函数,将标准时间转换为UNIX时间
create or replace function unix_timestamp (timestamp_minutes timestamp) 
returns float as 
$$
import time
return time.mktime(time.strptime(timestamp_minutes, '%Y-%m-%d %H:%M:%S'))
$$
language plpythonu volatile security definer;

3、创建from_unixtime函数,将UNIX时间转换为标准时间
create or replace function from_unixtime (unix int) 
returns timestamp as 
$$
import time
return time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(unix))
$$
language plpythonu volatile security definer;

4、创建业务相关的函数nl_to_timestamp,将标准时间转换为UNIX时间
create or replace function nl_to_timestamp (timestamp_minutes timestamp) 
returns float as 
$$
select (floor(unix_timestamp($1) / 60) - 22616640) as unixtime
$$
language sql;

5、创建业务相关的函数nl_to_date,将UNIX时间转换为标准时间
create or replace function nl_to_date (timestamp_minutes int) 
returns timestamp as
$$
select from_unixtime(($1 + 22616640) * 60) as datetime
$$
language sql;

6、GreenPlum中删除函数需要指定函数的参数类型
testdb=# drop function from_unixtime(int);
DROP FUNCTION