将时间戳插入表时,它作为日期插入 - 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的主要内容,如果未能解决你的问题,请参考以下文章

将日期插入 MySQL 数据库时如何忽略时间戳

将系统时间戳插入配置单元表中的时间戳字段

在将数据从文件插入表时,如何用 NULL 替换 NA 值?

在oracle 10g sql plus中将日期和时间插入时间戳

添加新行时自动插入日期戳

在时间戳字段中插入日期时间变量