[英]how to loop through date string parameter in javascript stored procedure snowflake
[英]Snowflake TO_DATE or DATE not returning expected output from Stored Procedure
我正在设置会话变量
SET MY_LOAD_DATE = '1999-01-01T10:10:10';
SELECT TO_DATE('1999-01-01T10:10:10.0') as d; // this command will return proper date output
1999-01-01
CREATE OR REPLACE PROCEDURE MY_ID_UPDATE(ARG STRING)
RETURNS STRING
LANGUAGE JAVASCRIPT
AS
$$
var result = snowflake.execute({sqlText: `SELECT TO_DATE('`+ ARG +`') as d`});
result.next();
return result.getColumnValue(1);
return my_date;
$$;
CALL MY_ID_UPDATE($MY_LOAD_DATE);
存储过程返回以下
1999 年 1 月 1 日星期五 00:00:00 GMT-0800(太平洋标准时间)
存储过程内部发生了什么,为什么我为同一个 SELECT TO_DATE语句得到不同的输出。
......答案......
我已将字符串日期转换为日期,然后使用 toLocaleDateString 方法仅从日期时间获取日期。
CREATE OR REPLACE PROCEDURE MY_ID_UPDATE(ARG STRING)
RETURNS STRING
LANGUAGE JAVASCRIPT
AS
$$
var result = snowflake.execute({sqlText: `SELECT TO_DATE(?) as d`, binds: [ARG]});
result.next();
var my_date = result.getColumnValue(1);
var d = new Date(my_date);
return d.toLocaleDateString();
$$;
这将返回1/1/1999
“存储过程中发生了什么,为什么我为同一个 SELECT TO_DATE 语句得到不同的输出。”
SQL 和 JavaScript UDF 提供相似但不同的数据类型,基于它们的原生数据类型支持。 Snowflake 和 JavaScript 中的对象使用以下映射进行传输。
...
所有时间戳和日期类型都转换为 JavaScript Date() 对象。 JavaScript 日期类型等效于 Snowflake SQL 中的 TIMESTAMP_LTZ(3)。
...
SQL DATE 转换为 JavaScript 日期,表示本地时区中当天的午夜。
转换如下:
CREATE OR REPLACE PROCEDURE MY_ID_UPDATE(ARG STRING)
作为字符串TO_DATE(...)
作为日期result.getColumnValue(1);
日期()对象RETURNS STRING
日期()对象转换回串旁注:连接字符串执行可能会导致 SQL 注入
var result = snowflake.execute({sqlText: `SELECT TO_DATE('`+ ARG +`') as d`});
更好的方法是提供参数化查询:
var result = snowflake.execute({sqlText: `SELECT TO_DATE(?) as d`
,binds: [ARG]});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.