我正在将 unix 时间戳转换为日期
TO_TIMESTAMP(CAST( my_column AS BIGINT ) / 1000 )
名为my_column的属性是TEXT数据类型。开发人员已将源数据设计为允许 NULL,它正在破坏我的代码。
有没有办法编写一个合并语句来转换我的 Unix 时间戳或输出 NULL 值的默认日期?我尝试了以下方法
CASE WHEN my_column IS NULL THEN '2001-01-01 00:00:00' ELSE TO_TIMESTAMP(CAST( my_column AS BIGINT ) / 1000 ) END
但我收到错误
ERROR: invalid input syntax for integer: ""
欢迎任何建议。
问题是空字符串 (''
) 不能转换为数字。
您还需要检查空字符串,例如:
CASE
WHEN nullif(trim(my_column),'') IS NULL THEN '2001-01-01 00:00:00'
ELSE TO_TIMESTAMP(CAST( my_column AS BIGINT ) / 1000 )
END
这将正确处理所有空、空字符串或只有空格的字符串。如果无法转换为数字的内容存储在该列中,则这仍然会失败(例如'foobar'
)
但是您确实应该尝试将其更改为至少bigint
列。不过timestamp
会好得多