SQL Error: "-" can not be applied to timestamp
SQL Error: "-" can not be applied to timestamp
我正在使用以下 SQL 查询语句来计算以分钟为单位的时差。
query_preadm_uo = """
select distinct oe.icustay_id,
date_diff('second', timestamp '1970-01-01 00:00:00', oe.charttime) as charttime,
oe.itemid, oe.value ,
60*24*date_part('day',ic.intime-oe.charttime) +
60*date_part('hour',ic.intime-oe.charttime) +
date_part('min',ic.intime-oe.charttime) as datediff_minutes
from mimiciii.outputevents oe, mimiciii.icustays ic
"""
我收到以下错误。
SYNTAX_ERROR: line 1:167: '-' cannot be applied to timestamp,
timestamp unable to rollback
错误在代码的以下部分。
60*24*date_part('day',ic.intime-oe.charttime) + 60*date_part('hour',ic.intime-oe.charttime) + date_part('min',ic.intime-oe.charttime) as datediff_minutes
我是否可以通过更正查询中的上述部分代码并编写其他代码来实现相同的功能来消除此错误。
更新
更改为 Presto
,而不是 PostgreSQL
。
您可以简单地使用
DATE_DIFF('minute', ic.intime, oe.charttime) AS datediff_minutes
PostgreSQL 的原始答案
您可以使用 EXTRACT(EPOCH FROM ...)
将时间戳转换为时间戳和 unix 纪元之间的秒数,然后减去这些值并除以 60 得到分钟数,即
SELECT ...
(EXTRACT(EPOCH FROM ic.intime) - EXTRACT(EPOCH FROM oe.charttime)) / 60 AS datediff_minutes
...
请注意,您也可以替换为:
EXTRACT(EPOCH FROM oe.charttime) AS charttime,
对于
date_diff('second', timestamp '1970-01-01 00:00:00', oe.charttime) as charttime,
我正在使用以下 SQL 查询语句来计算以分钟为单位的时差。
query_preadm_uo = """
select distinct oe.icustay_id,
date_diff('second', timestamp '1970-01-01 00:00:00', oe.charttime) as charttime,
oe.itemid, oe.value ,
60*24*date_part('day',ic.intime-oe.charttime) +
60*date_part('hour',ic.intime-oe.charttime) +
date_part('min',ic.intime-oe.charttime) as datediff_minutes
from mimiciii.outputevents oe, mimiciii.icustays ic
"""
我收到以下错误。
SYNTAX_ERROR: line 1:167: '-' cannot be applied to timestamp, timestamp unable to rollback
错误在代码的以下部分。
60*24*date_part('day',ic.intime-oe.charttime) + 60*date_part('hour',ic.intime-oe.charttime) + date_part('min',ic.intime-oe.charttime) as datediff_minutes
我是否可以通过更正查询中的上述部分代码并编写其他代码来实现相同的功能来消除此错误。
更新
更改为 Presto
,而不是 PostgreSQL
。
您可以简单地使用
DATE_DIFF('minute', ic.intime, oe.charttime) AS datediff_minutes
PostgreSQL 的原始答案
您可以使用 EXTRACT(EPOCH FROM ...)
将时间戳转换为时间戳和 unix 纪元之间的秒数,然后减去这些值并除以 60 得到分钟数,即
SELECT ...
(EXTRACT(EPOCH FROM ic.intime) - EXTRACT(EPOCH FROM oe.charttime)) / 60 AS datediff_minutes
...
请注意,您也可以替换为:
EXTRACT(EPOCH FROM oe.charttime) AS charttime,
对于
date_diff('second', timestamp '1970-01-01 00:00:00', oe.charttime) as charttime,