运行下面的代码时,我收到一条错误消息,指出来自admission_datetime的时间戳类型的输入语法无效。
UPDATE ccsm.stg_demographics_baseline
SET xx_los_days =
(CASE WHEN admission_datetime IS NULL OR
date_trunc('day',admission_datetime) = ''
THEN NULL
WHEN discharge_datetime IS NULL OR
date_trunc('day',discharge_datetime) = ''
THEN date_diff('day', admission_datetime, CURRENT_DATE)
ELSE
date_diff('day', admission_datetime, discharge_datetime)
END);
enter code here
See date_trunc文档 https://www.postgresql.org/docs/10/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC:
返回值的类型为时间戳或间隔,所有比所选字段重要的字段都设置为零(或对于日期和月份为 1)。
所以你不能将它与空字符串进行比较:
date_trunc('day', admission_datetime) = ''
The invalid input syntax for type timestamp
错误消息涉及空字符串 (''
),而不是admission_datetime
column.
此外,没有date_diff
PostgreSQL 中的函数。减一就可以了timestamp
从另一个,你会得到一个interval
result:
SELECT timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00'
你会得到
interval '1 day 15:00:00'
如果您需要差异days, 尝试这个:
SELECT DATE_PART('day', timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00')
结果是1
.
See here http://www.sqlines.com/postgresql/how-to/datediff的例子DATEDIFF
类似于 PostgreSQL 中的表达式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)