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

时间:2021-07-06 23:22:09

标签: snowflake-cloud-data-platform

我正在尝试从 select 语句中检索一个值,然后使用该值作为过滤器使用 binds 传递。如果我在存储过程中执行相同的 SELECT 语句,当我在雪花中执行 SELECT 语句时,我得到一个日期值“2021-07-05”,我得到不同格式的值“Mon Jul 05 2021 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(); 

我附上了执行上述语句后雪花的屏幕截图供您参考。just select querydate format changed in SP

1 个答案:

答案 0 :(得分:2)

上面的存储过程是用 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 $$