postgresql中的文本到时间戳

时间:2018-03-22 09:41:37

标签: postgresql

在视图中,我有一个text列,其中包含此格式'20/03/2018 00:00'的时间戳,我正在尝试使用between子句进行选择,但它不起作用

SELECT id,entry_date
FROM v_view 
WHERE entrada BETWEEN to_timestamp('20/03/2018 00:00','DD/MM/YYYY')::timestamp and to_timestamp('22/03/2018 00:00')::timestamp
order entry_date

出现此错误消息

ERROR:  el operador no existe: text >= timestamp without time zone
LINE 3: WHERE entry_date BETWEEN to_timestamp('20/03/2018 00:00','DD/MM.

1 个答案:

答案 0 :(得分:2)

您需要将entrada列值转换为时间戳。

另外:将to_timestamp()的结果投放到timestamp是没用的,因为to_timestamp()已经返回timestamp

SELECT id,entry_date
FROM v_view 
WHERE to_timestamp(entrada, 'dd/mm/yyyy hh24:mi') 
      BETWEEN to_timestamp('20/03/2018', 'DD/MM/YYYY') 
          and to_timestamp('22/03/2018', 'dd/mm/yyyy')
order entry_date;

我更喜欢在to_timestamp函数上使用ANSI SQL时间戳文字:

SELECT id,entry_date
FROM v_view 
WHERE to_timestamp(entrada, 'dd/mm/yyyy hh24:mi') 
      BETWEEN timestamp '2018-03-20 00:00:00' 
          and timestamp '2018-03-22 00:00:00'
order entry_date

请勿在{{1​​}}或text列中存储日期,时间或时间戳值。您应该将该列定义为varchar,然后您不需要转换任何内容,也不需要处理该列中的无效时间戳值。