我在使用snowflake的javascript处理snowflake中的日期时遇到问题。
一个选择查询并获取日期。它在源表中声明为日期。我希望能够在此日期上添加1天,然后将其插入另一个表的日期字段中。但是,我得到了一个绑定错误。在另一个stackoverflow的帮助下,我得到了返回的类型,发现它是一个字符串,而不是sfdate。
如何将select返回的字符串转换为可以处理的日期?一个额外的问题是我怎样才能增加一天的价值?
还尝试使用try\u to\u date将其转换为日期,如下所示:
var convertedRunningDate = Date("Sun Jul 29 2018 00:00:00 GMT-0700 (PDT)");
statement = snowflake.createStatement(
{
sqlText: " insert into mytable(date_stamp) values(try_to_date(?)) "
,binds: convertedRunningDate
}
);
如果没有它:
var convertedRunningDate = Date("Sun Jul 29 2018 00:00:00 GMT-0700 (PDT)");
statement = snowflake.createStatement(
{
sqlText: " insert into mytable(date_stamp) values(?) "
,binds: convertedRunningDate
}
);
我得到了
Invalid binds argumentSun Jul 29 2018 00:00:00 GMT-0700 (PDT). Error: Unsupported type for binding argument 2undefined
在这两种情况下
1条答案
按热度按时间huus2vyu1#
默认javascript
Date.toString()
表示法将日期转换为非标准格式的字符串。另外,使用Date
确保您通过new
关键字否则Date
用作拒绝无效输入并静默返回当前日期的函数。当在sql中使用javascript的默认日期字符串格式转换为日期或时间戳类型时,snowflake只识别标准格式的字符串,并拒绝表单的js日期字符串
Sun Jul 29 2018 00:00:00 GMT-0700 (PDT)
. 使用Date.toISOString()
而是生成一个可用于snowflake sql类型的可用表示。此外,在
snowflake.createStatement(…)
必须始终是元素数组,即使您计划只向其传递单个元素。也就是说,供应binds: [convertedRunningDate]
而不是binds: convertedRunningDate
.结合以上两点,下面的示例演示了如何在javascript中从一个表到另一个表操纵日期。
结果如下:
如果你需要任意使用
Date
对象,而不是从表行中获取,只需确保正确地构造它们(使用new
),绑定时使用Date.toISOString()
方法,而不是按原样传递它(默认值toString()
生成不兼容的格式)。注意:在可能的情况下,尝试通过sql操作它,只提取结果,这样就不必使用两个不同的日期/时间类型系统。
进一步阅读:
mozilla的javascript内置参考
snowflake的存储过程类型和API参考
在snowflake的存储过程中处理sql和javascript之间的类型转换
支持的自动字符串到日期/时间/时间戳输入格式的雪花列表