Postgresql 如何从Varchar字符串转换为Unix时间类型?青梅

Postgresql 如何从Varchar字符串转换为Unix时间类型?青梅,postgresql,timestamp,varchar,greenplum,Postgresql,Timestamp,Varchar,Greenplum,我对SQL相当缺乏经验,更不用说PostgreSQL了,所以感谢您的帮助 假设我们有一个名为ID的varchar列,它是IP地址和unix历元时间字符串的组合 因此,当我运行此查询时: SELECT substring(b.id from char_length (r.IP_address)+2 for 10), b.id, r.ip_address FROM bq b INNER JOIN event r ON r.visitor_id::TEXT = b.id::TEXT LIMIT 3;

我对SQL相当缺乏经验,更不用说PostgreSQL了,所以感谢您的帮助

假设我们有一个名为ID的varchar列,它是IP地址和unix历元时间字符串的组合

因此,当我运行此查询时:

SELECT substring(b.id from char_length (r.IP_address)+2 for 10), b.id, r.ip_address
FROM bq b
INNER JOIN event r ON r.visitor_id::TEXT = b.id::TEXT 
LIMIT 3;
输出

substring   id  ip_address
1460854333  97.128.39.256.1460854333288493  97.128.39.256

因此,子字符串的输出是unix时间戳,但它是varchar格式。如何将varchar转换为unix时间戳?最终,我将把时间戳转换成日期。我只是不认为我可以直接从unix字符串的varchar转换成日期?

正如Terra所说,使用
to_timestamp()
函数:

# select to_timestamp('1460854333') ;
      to_timestamp
------------------------
 2016-04-16 17:52:13-07
(1 row)
如果日期是您要查找的类型,只需添加
::date
cast:

# select to_timestamp('1460854333')::date ;
      to_timestamp
------------------------
 2016-04-16
(1 row)
该函数基本上执行以下操作:

select ('epoch'::timestamptz + '1460854333'::float * '1 second'::interval) ;

to_timestamp()
函数与字符串datatypesHow配合良好您会定义其中的Unix元素吗?由于字符串不是日期格式…Greenplum使用非常旧的PostgreSQL版本,最新版本为8.3。
SELECT version()的输出是什么?实际上凯尔对输出类型的编辑解决了这个问题。我想我可以直接使用时间戳,它会显示一条错误消息“提示:没有函数匹配给定的名称和参数类型。”我是一个新手。谢谢大家的帮助!奇怪的是,我的postgres没有这个功能……还有什么其他工作可以让我转换这个子字符串吗?我已经用等价的语句更新了答案,使之成为
to_timestamp()
函数,尽管Greenplum的每个版本都应该在
pg_catalog
中有这个功能。请将答案标记为已接受。嗨,凯尔,谢谢!。在第一次运行select to_timestamp(id::float)::解决的日期时,更改为::float很有帮助。非常感谢你为我指明了正确的方向!我相信这些对你来说很简单,但对那些刚刚学习的人来说却有很大帮助!