如何在雪花日期数据类型字段中插入儒略日期

Posted

技术标签:

【中文标题】如何在雪花日期数据类型字段中插入儒略日期【英文标题】:How to insert Julian Date in Snowflake Date Datatype field 【发布时间】:2020-09-15 20:00:00 【问题描述】:

我的数据格式如下(Julian):

2020102 2019134

Snowflake 中的数据类型是该字段的日期。如何使用复制命令将其插入雪花中。

我在下面想,但我还找不到 Julian 的日期格式。 复制到 Table*col1,col2) (select $1,TO_DATE($2,'format') from @%Table

【问题讨论】:

【参考方案1】:

Snowflake 目前不支持儒略日期格式,但您可以使用表达式将其转换为日期。 COPY 还不支持所有功能,但您可以使用舞台上的 INSERT+SELECT 来完成。这是一个简单的例子:

COPY INTO @~/test
FROM
  (SELECT $1 FROM
   VALUES (2020102),(2019134))
;


CREATE OR REPLACE TABLE t1 (juldate int, caldate date);


INSERT INTO t1
SELECT $1,
       (left($1, 4)||'-01-01')::date + right($1, 3)::integer - 1
FROM @~/test;


SELECT *
FROM t1;

JULDATE CALDATE
2020102 2020-04-11
2019134 2019-05-14

【讨论】:

【参考方案2】:

Snowflake 没有内置的儒略日期转换器,我认为您提供的值实际上也不是儒略日期,因为格式通常没有 4 位数的年份,我不认为.无论哪种方式,您都需要进行一些解析和添加日期。这样的事情可能会奏效,尽管我不能 100% 确定要确认的预期结果是什么:

with x as (
    SELECT '2020102' as julian
  )
SELECT DATEADD(days,SUBSTRING(julian,5,3)::number-1,(SUBSTRING(julian,1,4)||'-01-01')::DATE)
FROM x;

这似乎有效,但同样不是 100% 确定。

【讨论】:

以上是关于如何在雪花日期数据类型字段中插入儒略日期的主要内容,如果未能解决你的问题,请参考以下文章

在java中如何将日期字符串保存到Oracle数据库中对应的Date类型字段中

求助!!如何在java代码中,将日期插入mysql数据库(对应字段类型是datetime),用JDBC连接数据库。

oracle中如何修改日期类型的字段值

雪花标量 UDF 返回 无法评估不支持的子查询类型

“条件表达式中的数据类型不匹配”错误将日期插入 Access 数据库中的日期/时间字段

oracle中将原有的年、月、日个字段整合成日期形式插入数据库?