database - 类型时间戳的无效输入语法
问题描述
运行以下代码时,我收到一条错误消息,指出从 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
解决方案
请参阅date_trunc
文档:
返回值的类型为时间戳或间隔,所有比所选字段不重要的字段都设置为零(或一,对于日和月)。
因此,您不能将其与空字符串进行比较:
date_trunc('day', admission_datetime) = ''
invalid input syntax for type timestamp
错误消息涉及空字符串 ( ''
),而不是列admission_datetime
。
此外,PostgreSQL 中没有date_diff
函数。只需timestamp
从另一个中减去一个,您将得到一个interval
结果:
SELECT timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00'
你会得到
interval '1 day 15:00:00'
如果您需要天数的差异,请尝试以下操作:
SELECT DATE_PART('day', timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00')
结果是1
。
有关PostgreSQL中的 -like 表达式的示例,请参见此处。DATEDIFF
推荐阅读
- python - Plotly:如何组织下拉菜单?
- django - 如何重定向到django中的页面
- c# - 如何使用 ValueTuples 创建一个不区分大小写的通用多键字典?
- c# - UWP C# - 同时测试两个应用程序
- python - 如何在 Matplotlib 上对多个图进行分组并将它们保存在 png 中?
- php - 格式化 MySQL 行中的数据以供下载
- c++ - 内存泄漏检测器如何区分应用程序调用的 malloc 和第三方 malloc 调用?
- node.js - 如何在节点js的预签名url请求中发送内容md5标头
- jenkins - 从单个报告名称下的多个文件夹发布 Html 报告 - Jenkins,HTML Publisher
- swift - 如何在没有按钮的情况下自动在 SwiftUI 中呈现模态