在视图中,我有一个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.
答案 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
,然后您不需要转换任何内容,也不需要处理该列中的无效时间戳值。