当我在存储过程中使用相同的公式计算日期时,日期值格式不同 - 雪花

Posted

技术标签:

【中文标题】当我在存储过程中使用相同的公式计算日期时,日期值格式不同 - 雪花【英文标题】:Date value format is different when I use the same formula to calculate date in Stored Procedure - Snowflake 【发布时间】:2021-07-06 23:22:09 【问题描述】:

我正在尝试从 select 语句中检索一个值,然后在传递时使用该值作为使用 binds 的过滤器。如果我在存储过程中执行相同的 SELECT,我只在雪花中执行 SELECT 语句时会得到一个日期值“2021-07-05”,我得到不同格式的值“2021 年 7 月 5 日星期一 00:00:00 GMT -0700(太平洋夏令时间)”。我尝试使用 TO_DATE,提取 DATE_PART 但没有任何效果。处理此问题并将该值转换为“2021-07-05”的任何方法。

使用的代码:

select TO_DATE(DATEADD(D,-1,CURRENT_DATE())) AS DATE;

CREATE OR REPLACE PROCEDURE TEST_SP()       
RETURNS VARCHAR LANGUAGE javascript      
AS $$
var condition=`select TO_DATE(DATEADD(D,-1,CURRENT_DATE())) AS DT`;
var condition_check = snowflake.createStatement(sqlText: condition).execute();
condition_check.next();
var filter_condition = condition_check.getColumnValue(1);

        return filter_condition  
        $$;  

CALL TEST_SP(); 

我附上了执行上述语句后雪花的截图供大家参考。

【问题讨论】:

【参考方案1】:

上面的存储过程是用 JavaScript 编写的,并返回一个 VARCHAR——一个字符串。

如问题所示:

CREATE OR REPLACE PROCEDURE TEST_SP()       
RETURNS VARCHAR LANGUAGE JAVASCRIPT      
AS $$

所以当 JavaScript 试图返回一个 Date 值时,它会在到达 Snowflake 空间之前转换为 String ——这就是你看到不同之处的原因。

试试吧:

CREATE OR REPLACE PROCEDURE TEST_SP()       
RETURNS DATE LANGUAGE JAVASCRIPT      
AS $$

【讨论】:

以上是关于当我在存储过程中使用相同的公式计算日期时,日期值格式不同 - 雪花的主要内容,如果未能解决你的问题,请参考以下文章

当另一个单元格的值发生变化时,一个单元格中的自动日期更新(通过公式计算)

当我在同一列中有不同格式的值时如何使日期列值相同

蔡勒(Zeller)公式及其推导:快速将任意日期转换为星期数

建议我使用日期格式自定义 excel

不同计算机上的纪元日期转换结果不同

自动计算从开始日期起 90 天