Oracle
在 PLSQL 中處理“char(10)”數據類型/TRY_CONVERT 等效列中不正確日期格式的更好方法
我有一個具有以下結構的源表:
create table customer_info (customer_num number, birth_date char(10))
不幸的是,
birth_date
列數據類型char(10)
不是date
. 此表的一些範例數據如下所示:customer_num | birth_date -------------------------------- 1 | 2001/01/01 1 | 2010/01/01 1 | 2021/01/01 1 | 12hhhhuu6 --> Incorrect date 1 | 2001/01/01 1 | 2001/23/01 --> Incorrect date
我所做的是編寫一個函式來評估每條記錄並返回它的正確格式,但如您所知,對每條記錄使用一個函式並不是一個好主意,它會以某種方式降低性能。我想知道您是否可以為此提出更好的方法。
create or replace function new_to_date_en(d varchar2) return DATE is v_date date; begin select to_date(d,'yyyy/mm/dd' ) into v_date from dual; return to_date(d,'yyyy/mm/dd'); exception when others then return to_dateto_date('2021/03/07', 'yyyy/mm/dd'); end;
使用功能:
select customer_num, new_to_date_en(birth_date) from customer_info;
T-SQL 中有一種方法
COALESCE(TRY_CONVERT(date, @date, 111), '2012-01-01')
。oracle plsql中有類似的方法嗎?提前致謝
TRY_CONVERT
是為每條記錄呼叫的函式,有什麼不同?以下工作自 12.2 起:
SQL> alter session set nls_date_format='YYYY/MM/DD'; Session altered. SQL> select cast('2021/03/07' as date default date'2012-01-01' on conversion error) from dual; CAST('2021 ---------- 2021/03/07 SQL> select cast('X021/zz/99' as date default date'2012-01-01' on conversion error) from dual; CAST('2021 ---------- 2012/01/01 SQL> select to_date('X021/zz/99' default date'2012-01-01' on conversion error, 'YYYY/MM/DD') from dual; TO_DATE('X ---------- 2012/01/01 SQL>
在您的版本上,您可以使用您的功能。