使用to_date()将字符串转换为日期

时间:2016-07-07 16:59:49

标签: sql postgresql amazon-redshift

我有一个名为VARCHAR(64)的{​​{1}}列的表,其中包含具有以下格式的日期时间字符串: datetimestamp

我尝试在我的select语句中使用[02/Jun/2016:23:58:30 +0000]将其转换为日期,但我收到的格式无效'错误。不知道它的UTC位是什么,或者它是什么搞乱了......什么是正确的语法?

谢谢!

2 个答案:

答案 0 :(得分:0)

select to_date('02/Jun/2016:23:58:30 +0000', 'DD/Mon/YYYY:HH24:MI:SS');

|   to_date  |
|------------|
| 2016-06-02 |

答案 1 :(得分:0)

由于to_timestamp不允许时区信息,因此有点复杂。

我提出了这个问题:

WITH d(part) AS
   (SELECT regexp_matches(
             '02/Jun/2016:23:58:30 +0000',
             '^([^ ]*) ([-+]?\d\d)(\d\d)$'
           )
   )
SELECT
   CAST (to_timestamp(d.part[1], 'DD/Mon/YYYY:HH24:MI:SS')
              AT TIME ZONE (d.part[2] || ':' || d.part[3])
        AS timestamp with time zone)
   AS converted
FROM d;

       converted
------------------------
 2016-06-02 21:58:30+02
(1 row)

(我在时区UTC + 02。)