'Stored Procedure Snowflake - time formatting issue

var get_end_time = "select CURRENT_TIME()";
var time_sql = {sqlText: get_end_time};
var time_create = snowflake.createStatement(time_sql);
var time_exec_end = time_create.execute();
time_exec_end.next();
var end_time = time_exec_end.getColumnValue(1);

I have this code above in a JavaScript stored procedure in snowflake, this query produces: 11:27:35.181000000

How can I strip this to only give me 11:27:35?



Solution 1:[1]

JavaScript Procedure is returning type as string, so value cannot be interpreted in snowflake as time or to apply time-base formats.

Code without any formatting for time -

CREATE OR REPLACE PROCEDURE test_time()
RETURNS STRING
LANGUAGE javascript
AS
$$
 var get_end_time = "select CURRENT_TIME()";
 var time_sql = {sqlText: get_end_time};
 var time_create = snowflake.createStatement(time_sql);
 var time_exec_end = time_create.execute();
 time_exec_end.next();
 var end_time = time_exec_end.getColumnValue(1);
  return end_time;
$$
;


call test_time();
TEST_TIME
06:20:47.250000000

Use TO_CHAR to get desired format and return same.

CREATE OR REPLACE PROCEDURE test_time()
RETURNS STRING
LANGUAGE javascript
AS
$$
 var get_end_time = "select to_char(CURRENT_TIME())";
 var time_sql = {sqlText: get_end_time};
 var time_create = snowflake.createStatement(time_sql);
 var time_exec_end = time_create.execute();
 time_exec_end.next();
 var end_time = time_exec_end.getColumnValue(1);
  return end_time;
$$
;

call test_time();
TEST_TIME
06:27:50

JavaScript does not have a date data-type.

If we are using SQL based procedure which returns datetype date/timestamp, then its interpretation is as per set format.

In below code there are no format functions applied.

create or replace procedure test_time()
returns date
language sql as
$$
begin
  return (select current_timestamp());
end;
$$
;

alter session set timestamp_output_format='hh24:mi:ss.sss';

call test_time();
TEST_TIME
07:03:48.48S
alter session set timestamp_output_format='hh24:mi:ss.ff';

call test_time();
TEST_TIME
07:05:07.236000000
alter session set timestamp_output_format='hh24:mi:ss';

call test_time();
TEST_TIME
07:05:39

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1