You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行SQL代码时出现admission_datetime的timestamp类型输入语法错误求助

排查并修复timestamp语法错误问题

我来帮你搞定这个报错!你遇到的invalid input syntax for type timestamp错误,核心是错误地把timestamp类型的值和空字符串做比较,咱们一步步拆解问题并修复:

错误根源:类型不匹配的非法比较

你在CASE语句里写了date_trunc('day',admission_datetime) = '',这里有两个关键问题:

  • date_trunc返回的是timestamp/date类型,而''是文本字符串,数据库尝试把空字符串转成timestamp时直接失败,这就是报错的直接原因。
  • 逻辑上完全没必要:你已经判断了admission_datetime IS NULL,而date_trunc处理NULL值返回的还是NULL,timestamp类型的字段根本不可能存储空字符串,只会是NULL或者合法的时间值。

修复后的SQL代码

去掉和空字符串的无效比较,同时优化CASE语句的可读性,修正后的代码如下:

UPDATE ccsm.stg_demographics_baseline 
SET xx_los_days = (
    CASE 
        -- 如果入院时间为空,直接返回NULL
        WHEN admission_datetime IS NULL THEN NULL 
        -- 如果出院时间为空,计算入院到当前日期的天数差
        WHEN discharge_datetime IS NULL THEN DATE_DIFF('day', admission_datetime, CURRENT_DATE)
        -- 否则计算入院到出院的天数差
        ELSE DATE_DIFF('day', admission_datetime, discharge_datetime)
    END
);

额外适配说明

如果你的数据库不支持DATE_DIFF函数(比如PostgreSQL),需要换成对应数据库的语法:

-- PostgreSQL 适配版本
UPDATE ccsm.stg_demographics_baseline 
SET xx_los_days = (
    CASE 
        WHEN admission_datetime IS NULL THEN NULL 
        WHEN discharge_datetime IS NULL THEN CURRENT_DATE - DATE(admission_datetime)
        ELSE DATE(discharge_datetime) - DATE(admission_datetime)
    END
);

另外建议你先检查admission_datetime和discharge_datetime字段的脏数据:如果有存储了非时间格式的字符串(比如乱码、无效日期),也会触发类似的类型错误,需要先清理这些记录再执行更新。

内容的提问来源于stack exchange,提问作者Sachin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:07:42