AWS redshift->hdb pg(Greenplum), CONVERT_TIMEZONE 时区转换函数兼容

简介: postgresql 函数

背景
redshift 时区转换函数

https://docs.amazonaws.cn/redshift/latest/dg/CONVERT_TIMEZONE.html

CONVERT_TIMEZONE 函数

CONVERT_TIMEZONE 将时间戳从一个时区转换为另一个时区。

语法

CONVERT_TIMEZONE ( ['source_timezone',] 'target_timezone', 'timestamp')
参数

source_timezone
(可选)当前时间戳的时区。默认值为 UTC。有关更多信息,请参阅 时区使用说明。

target_timezone
新时间戳的时区。有关更多信息,请参阅 时区使用说明。

timestamp
时间戳列,或隐式转换为时间戳的表达式。

hdb pg 自定义UDF兼容CONVERT_TIMEZONE
https://www.postgresql.org/docs/devel/static/functions-datetime.html

自定义函数如下

create or replace function CONVERT_TIMEZONE (text,text,timestamp) returns timestamp as

$$ select timezone($2, timezone ($1,$3)); $$

language sql strict ;

create or replace function CONVERT_TIMEZONE (text,timestamp) returns timestamp as

$$ select timezone($1, timezone ('UTC',$2)); $$

language sql strict ;
数据库时区代码

select * from pg_timezone_abbrevs ;

abbrev utc_offset is_dst
ACDT 10:30:00 t
ACSST 10:30:00 t
ACST 09:30:00 f
ACT -05:00:00 f
CDT -05:00:00 t
CEST 02:00:00 t
CET 01:00:00 f
CETDST 02:00:00 t
CHADT 13:45:00 t
CHAST 12:45:00 f
CHUT 10:00:00 f
CKT -10:00:00 f
CLST -03:00:00 t
CLT -03:00:00 t
COT -05:00:00 f
UT 00:00:00 f
UTC 00:00:00 f

....
验证如下

postgres=# select CONVERT_TIMEZONE('CLT','UTC','2018-01-01');

convert_timezone

2018-01-01 03:00:00
(1 row)

postgres=# select CONVERT_TIMEZONE('CLT','CET','2018-01-01');

convert_timezone

2018-01-01 04:00:00
(1 row)

postgres=# select CONVERT_TIMEZONE('CET','2018-01-01');

convert_timezone

2018-01-01 01:00:00
(1 row)

postgres=# select CONVERT_TIMEZONE('CLT','2018-01-01');

convert_timezone

2017-12-31 21:00:00
(1 row)
参考
https://www.postgresql.org/docs/devel/static/functions-datetime.html

https://docs.amazonaws.cn/redshift/latest/dg/CONVERT_TIMEZONE.html
转自阿里云德哥

目录
相关文章
|
SQL 关系型数据库 PostgreSQL
PostgreSQL datediff 日期间隔(单位转换)兼容SQL用法
标签 PostgreSQL , datediff 背景 使用datediff,对时间或日期相减,得到的间隔,转换为目标单位(日、月、季度、年、小时、秒。。。等)的数值。 DATEDIFF ( datepart, {date|timestamp}, {date|timestamp} ) 周...
14264 0
|
6月前
|
关系型数据库 MySQL PostgreSQL
修改mysql_fdw兼容日期为0的数据
日期本来是不能为0的,但mysql在非严格模式下可以设置日期为0,导致pg通过mysql_fdw访问mysql时遇到日期为0的数据会报错,这里给出一种简单的解决办法。
84 0
|
9月前
|
存储 Perl
GreenPlum7/PG12中如何添加一个自定义内置函数
GreenPlum7/PG12中如何添加一个自定义内置函数
73 0
|
SQL Oracle 关系型数据库
sql中datetime日期类型字段比较(mysql&oracle)
sql中datetime日期类型字段比较(mysql&oracle)
204 0
|
关系型数据库 MySQL
PolarDB-X 1.0-SQL 手册-数据类型-日期和时间类型
PolarDB-X支持如下日期时间类型:
278 0
|
索引 关系型数据库
ADB PG 6.0 新特性支持 - Range数据类型
Range Types range types可以用来标识一些类型(range's subtype)的范围。例如:ranges of timestamp可以用来表示一个会议室预定的起始和结束时间,对应的类型为tsrange,而timestamp为tsrange的subtype。
1367 0
|
SQL 算法 关系型数据库
|
Web App开发 SQL Java