将 varchar 数组转换为日期数组-pl sql

convert varchar array to date array-pl sql

我正在尝试将 varchar 数组转换为日期数组。目前正在以字符串的形式从 Java class 访问日期,但它需要在那里有一个日期。因此我需要将 varchar 数组转换为日期数组。我在这里只能看到有关将字符串转换为日期格式的问题,这不是我想要的。将 varchar 数组转换为日期数组有何不同?

这是我需要程序转换的变量。

P_IN_GRID_EFFECTIVE_DATE  IN P_DVP_CONSTS.T_VCHAR10ARRAY,

类型和功能:

create type tv as varray(5) of varchar2(15);
create type td as varray(5) of date;

create or replace function v2d (i_varchars in tv) 
  return td pipelined is
begin
  for i in 1..i_varchars.count
  loop
    pipe row (to_date(i_varchars(i), 'mm/dd/yyyy'));
  end loop;
end;

测试:

select * from table(v2d(tv('09/01/2010', '06/15/2015')));

COLUMN_VALUE
------------
2010-01-01
2015-06-15

您可以围绕一个数组循环并使用其内容填充第二个数组;在这种情况下,每个条目都有一个 to_date() 调用。作为一个简单的演示:

create procedure convert_array(
  P_IN_GRID_EFFECTIVE_DATE IN P_DVP_CONSTS.T_VCHAR10ARRAY,
  P_OUT_GRID_EFFECTIVE_DATE OUT P_DVP_CONSTS.T_DATEARRAY
) as
begin
  P_OUT_GRID_EFFECTIVE_DATE := new P_DVP_CONSTS.T_DATEARRAY();
  P_OUT_GRID_EFFECTIVE_DATE.extend(P_IN_GRID_EFFECTIVE_DATE.count);
  for i in 1..P_IN_GRID_EFFECTIVE_DATE.count loop
    P_OUT_GRID_EFFECTIVE_DATE(i) :=
      to_date(P_IN_GRID_EFFECTIVE_DATE(i), 'YYYY-MM-DD');
      -- or whatever format your strings are using
  end loop;
end convert_array;
/

快速测试:

set serveroutput on
declare
  l_strings P_DVP_CONSTS.T_VCHAR10ARRAY;
  l_dates P_DVP_CONSTS.T_DATEARRAY;
begin
  l_strings := P_DVP_CONSTS.T_VCHAR10ARRAY('2015-06-08', '2015-07-09',
    '2015-08-10');
  convert_array(l_strings, l_dates);
  dbms_output.put_line('Number of dates in array: ' || l_dates.count);
  for i in 1..l_dates.count loop
   dbms_output.put_line('Date ' || i
     || ': ' || to_char(l_dates(i), 'DD/MM/YYYY'));
  end loop;
end;
/

PL/SQL procedure successfully completed.

Number of dates in array: 3
Date 1: 08/06/2015
Date 2: 09/07/2015
Date 3: 10/08/2015