Oracle是否具有内置功能来根据其各个组成部分(年,月和日)创建仅对缺失数据返回null的日期?
我知道,TO_DATE()但是我需要首先编写一个字符串,并且||运算符和CONCAT()函数都无法轻松处理丢失的数据:
TO_DATE()
||
CONCAT()
-- my_year NUMBER(4,0) NULL SELECT TO_DATE(my_year || '-01-01', 'YYYY-MM-DD') AS my_date FROM my_table;
只要my_year是NULL我们最终TO_DATE('-01-01', 'YYYY-MM-DD')和:
my_year
NULL
TO_DATE('-01-01', 'YYYY-MM-DD')
ORA-01841: (full) year must be between -4713 and +9999, and not be 0
例如,您可以使用case:
case
select (case when my_year is not null and my_year <> 0 and my_year between -4713 and 9999 then TO_DATE(my_year || '-01-01', 'YYYY-MM-DD') end)
不幸的是,Oracle没有一种方法(如果可能)进行转换,否则将返回NULL。SQL Server最近try_convert()为此目的而引入。
try_convert()
一种选择是为失败的转换编写带有异常处理程序的函数。异常处理程序只会返回NULL错误的格式。