gpt4 book ai didi

javascript - Snowflake/javascript 日期时间格式在迭代期间发生变化

转载 作者:行者123 更新时间:2023-12-05 04:40:27 26 4
gpt4 key购买 nike

 Column_name   DateType           Actual data(in table)   
CALDT TIMESTAMP_LTZ(9) 2021-12-07 15:17:04.673 -0800

Javascript 将上述日期转换为类似“2021 年 12 月 7 日星期二 14:52:12 GMT-0800(太平洋标准时间)”的内容

这是javascript代码

         var caldt = " SELECT CALDT"
caldt += " FROM INFORMATION_SCHEMA.TABLES "
caldt += " WHERE TABLE_SCHEMA = " + String.fromCharCode(39) + TARGET_SCHEMA + String.fromCharCode(39)
caldt += " AND TABLE_NAME = " + String.fromCharCode(39) + TARGET_TABLE + String.fromCharCode(39);

var cal_statement = snowflake.createStatement({sqlText: caldt });
var cal_resultSet = cal_statement.execute();
var cal_column_name_array = "";

while (cal_resultSet .next()) {
var cal_column_name =cal_resultSet .getColumnValue(1);
**cal_column_name_array = cal_column_name_array += String.fromCharCode(39) + cal_column_name + String.fromCharCode(39) + ", " ;
}
cal_column_name_array = cal_column_name_array.substring(0, cal_column_name_array.length-2);**

上面** ... ** 之间的代码正在修改时间戳

但是我需要获得相同的日期时间戳(2021-12-07 15:17:04.673 -0800)和

不是“2021 年 12 月 7 日星期二 14:52:12 GMT-0800(太平洋标准时间)”

如何格式化 javascript 迭代代码以返回日期时间/时间戳。谢谢

最佳答案

我已经测试过,如果您将 Snowflake 查询中的时间戳列强制为字符串,那么它将避免您的问题。

请参阅下面的测试用例。

  1. 准备数据(注意时间戳列必须是 TIMESTAMP_TZ 类型,否则它不会保留原始字符串,因为它被转换为本地时区或无时区,具体取决于您的设置):
create or replace table date_table(
date_string string,
date_time_tz timestamp_tz,
date_time_ntz timestamp_ntz,
date_time_ltz timestamp_ltz
);

insert into date_table values
('2021-12-07 15:17:04.673 -0800',
'2021-12-07 15:17:04.673 -0800',
'2021-12-07 15:17:04.673 -0800',
'2021-12-07 15:17:04.673 -0800');
  1. 准备SP:
create or replace procedure test_date(query string)
returns string
language javascript
as
$$
var my_date = "";
var cal_statement = snowflake.createStatement({sqlText: QUERY });
var rs = cal_statement.execute();
while (rs.next()) {

my_date += '*' + rs.getColumnValue(1) + '*\n';
my_date += '*' + rs.getColumnValue(2) + '*\n';
my_date += '*' + rs.getColumnValue(3) + '*\n';
my_date += '*' + rs.getColumnValue(4) + '*';
}

return my_date;
$$;
  1. 使用时间戳值调用 SP(它将显示您的问题):
call test_date('select * from date_table');

+------------------------------------------------------------------+
| TEST_DATE |
|------------------------------------------------------------------|
| *2021-12-07 15:17:04.673 -0800* |
| *Tue Dec 07 2021 23:17:04 GMT+0000 (Coordinated Universal Time)* |
| *Tue Dec 07 2021 15:17:04 GMT+0000 (Coordinated Universal Time)* |
| *Tue Dec 07 2021 23:17:04 GMT+0000 (Coordinated Universal Time)* |
+------------------------------------------------------------------+
  1. 通过将时间戳值转换为字符串(您想要的)来调用 SP:
call test_date('select date_string, date_time_tz::string, date_time_ntz::string, date_time_ltz::string from date_table');

+---------------------------------+
| TEST_DATE |
|---------------------------------|
| *2021-12-07 15:17:04.673 -0800* |
| *2021-12-07 15:17:04.673 -0800* |
| *2021-12-07 15:17:04.673000000* |
| *2021-12-07 23:17:04.673 Z* |
+---------------------------------+

因此您需要确保使用 timestamp_tz 数据类型并转换为字符串,这应该有助于解决您的问题。

更新

我们可以使用 getColumnValueAsString() 而不是 ResultSet 对象的 getColumnValue() 将值从 TIMESTAMP 转换为 JS 内部的 STRING,而不是在 SQL 级别。

https://docs.snowflake.com/en/sql-reference/stored-procedures-api.html#getColumnValueAsString

所以更新SP如下:

create or replace procedure test_date(query string)
returns string
language javascript
as
$$
var my_date = "";
var cal_statement = snowflake.createStatement({sqlText: QUERY });
var rs = cal_statement.execute();
while (rs.next()) {

my_date += '*' + rs.getColumnValueAsString(1) + '*\n';
my_date += '*' + rs.getColumnValueAsString(2) + '*\n';
my_date += '*' + rs.getColumnValueAsString(3) + '*\n';
my_date += '*' + rs.getColumnValueAsString(4) + '*';
}

return my_date;
$$;

然后我们可以运行 SELECT *:

call test_date('select * from date_table');

+----------------------------------------+
| TEST_DATE |
|----------------------------------------|
| *2021-12-07 15:17:04.673 -0800* |
| *2021-12-07 15:17:04.673000000 -08:00* |
| *2021-12-07 15:17:04.673000000* |
| *2021-12-07 23:17:04.673000000* |
+----------------------------------------+

我不知道是什么控制了毫秒部分的位数,因为 TIMESTAMP_%_OUTPUT_FORMAT 参数似乎无法控制它。

如有必要,您可能需要手动删除尾随零。

关于javascript - Snowflake/javascript 日期时间格式在迭代期间发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70270046/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com