0

我有一张包含几位欧洲君主的出生和死亡的表格,该表格没有年龄列,我必须添加它。还有几个空值和“无”值,在这种情况下,年龄列应该显示未知。

以下代码给了我一个invalid input syntax for type double precision错误。

    SELECT CASE
WHEN date_part('year', age(TO_TIMESTAMP(death, 'YYYY-MM-DD'), TO_TIMESTAMP(birth, 'YYYY-MM-DD'))) = 'None' OR death ISNULL
    THEN 'Unknown'
ELSE
    date_part('year', age(TO_TIMESTAMP(death, 'YYYY-MM-DD'), TO_TIMESTAMP(birth, 'YYYY-MM-DD')))
END

从君主时代开始

postgresql 没有 datediff 函数。非常感谢。

编辑

出生和死亡列是 varchars 并具有这种格式0208-10-01T00:53:28+00:53

4

1 回答 1

1

解决

使用了以下代码

CASE 
   WHEN death IS NULL OR birth IS NULL
      THEN 'Unknown'
      ELSE CAST(EXTRACT(YEAR FROM TO_TIMESTAMP(death, 'YYYY-MM-DD')) - EXTRACT(YEAR FROM TO_TIMESTAMP(birth, 'YYYY-MM-DD')) AS VARCHAR)
END 

'null' 是一个字符串。我的查询正在做减法,并且 case 语句需要具有相同的数据类型,因此我必须将其类型转换为 varchar。

于 2022-02-23T03:14:08.517 回答