gpt4 book ai didi

postgresql - 列是没有时区的时间戳类型,但表达式是字符类型

转载 作者:行者123 更新时间:2023-11-29 11:10:00 24 4
gpt4 key购买 nike

我试图在我尝试在 Redshift 上实现 SCD2 时插入记录但出现错误。

目标表的DDL是

CREATE TABLE ditemp.ts_scd2_test (
id INT
,md5 CHAR(32)
,record_id BIGINT IDENTITY
,from_timestamp TIMESTAMP
,to_timestamp TIMESTAMP
,file_id BIGINT
,party_id BIGINT
)

这是插入语句:

INSERT
INTO ditemp.TS_SCD2_TEST(id, md5, from_timestamp, to_timestamp)

SELECT TS_SCD2_TEST_STAGING.id
,TS_SCD2_TEST_STAGING.md5
,from_timestamp
,to_timestamp
FROM (
SELECT '20150901 16:34:02' AS from_timestamp
,CASE
WHEN last_record IS NULL
THEN '20150901 16:34:02'
ELSE '39991231 11:11:11.000'
END AS to_timestamp
,CASE
WHEN rownum != 1
AND atom.id IS NOT NULL
THEN 1
WHEN atom.id IS NULL
THEN 1
ELSE 0
END AS transfer
,stage.*
FROM (
SELECT id
FROM ditemp.TS_SCD2_TEST_STAGING
WHERE file_id = 2
GROUP BY id
HAVING count(*) > 1
) AS scd2_count_ge_1
INNER JOIN (
SELECT row_number() OVER (
PARTITION BY id ORDER BY record_id
) AS rownum
,stage.*
FROM ditemp.TS_SCD2_TEST_STAGING AS stage
WHERE file_id IN (2)
) AS stage
ON (scd2_count_ge_1.id = stage.id)
LEFT JOIN (
SELECT max(rownum) AS last_record
,id
FROM (
SELECT row_number() OVER (
PARTITION BY id ORDER BY record_id
) AS rownum
,stage.*
FROM ditemp.TS_SCD2_TEST_STAGING AS stage
)
GROUP BY id
) AS last_record
ON (
stage.id = last_record.id
AND stage.rownum = last_record.last_record
)
LEFT JOIN ditemp.TS_SCD2_TEST AS atom
ON (
stage.id = atom.id
AND stage.md5 = atom.md5
AND atom.to_timestamp > '20150901 16:34:02'
)
) AS TS_SCD2_TEST_STAGING
WHERE transfer = 1

简而言之,我正在尝试将 20150901 16:34:02 插入到 from_timestamp39991231 11:11:11.000to_timestamp

得到

错误:42804:“from_timestamp”列是没有时区的时间戳类型,但表达式是字符变化类型

有人可以建议如何解决这个问题吗?

最佳答案

Postgres 无法将 20150901 16:34:02(您的输入)识别为有效的时间/日期格式,因此它假定它是一个字符串。

改用标准日期格式,最好是 ISO-8601。 2015-09-01T16:34:02

SQLFiddle example

关于postgresql - 列是没有时区的时间戳类型,但表达式是字符类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32336651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com