将时间戳插入表时,它作为日期插入 - Redshift
Posted
技术标签:
【中文标题】将时间戳插入表时,它作为日期插入 - Redshift【英文标题】:When inserting timestamp to a table it inserts as date - Redshift 【发布时间】:2021-09-20 09:52:23 【问题描述】:我有table1
,上面有数据,每一行都有"period_start"
和"period_end"
,两列都是dates
。例如:“2021-06-30”。
我有一个table2
,我用两列同名创建,这次它们保存为timestamp
(客户希望作为时间戳)。
我运行了一个查询,将table1
的结果插入table2
,但将日期列转换为时间戳。出于某种我无法理解的原因,table2
中的结果都是日期,而不是时间戳。
创建table2
(删除其他列):
CREATE TABLE IF NOT EXISTS table2
(
,period_start timestamp ENCODE zstd
,period_end timestamp ENCODE zstd
)
从table1
插入:
insert into table2 (period_start ,period_end)
select
cast(to_date(period_start,'YYYY-MM-DD HH24:MI:SS') as timestamp),
cast(DATEADD(millisecond, -1,last_day(period_start + 75) + 1) as timestamp)
from table1;
当运行相同的选择时,我将结果完美地视为时间戳,当从 table2
查询时,结果将保存为日期。
【问题讨论】:
我会仔细检查您的假设并制作一个简单的测试用例。您所做的事情很可能有错误,因为 RS 几乎不可能出现这种基本错误。一种可能性 - 如果表已经存在,“如果不存在则创建表”将不执行任何操作。您确定表是用这些列定义为时间戳的吗? 是的,我在创建它之前删除了“table2”。 我没有看到上面提到删除 table2。无论哪种方式,我都希望为了获得帮助,您需要发布一个测试用例来演示相关问题。任何人都可以使用哪些步骤来重现此问题?我敢打赌,把这个测试用例放在一起你会发现错误。 我措辞不好。我的错! 我的意思是 - 我在创建 table2 之前删除了它,我按照上面的说明创建了它。我会试试你的建议比尔。谢谢。 【参考方案1】:事实证明查询确实很好(我很高兴)。 DBeaver 的一个问题是由于某种原因没有将它们显示为时间戳。我必须退出并进入程序,然后它才能工作。
【讨论】:
以上是关于将时间戳插入表时,它作为日期插入 - Redshift的主要内容,如果未能解决你的问题,请参考以下文章