Álv*_*lez 3 sql oracle oracle-xe oracle10g
Oracle是否具有内置功能,可以根据其各个组成部分(年,月和日)创建仅对丢失的数据返回false的日期?
我知道,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;
Run Code Online (Sandbox Code Playgroud)
只要my_year
是NULL
我们最终TO_DATE('-01-01', 'YYYY-MM-DD')
和:
-- my_year NUMBER(4,0) NULL
SELECT TO_DATE(my_year || '-01-01', 'YYYY-MM-DD') AS my_date
FROM my_table;
Run Code Online (Sandbox Code Playgroud)
例如,您可以使用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)
Run Code Online (Sandbox Code Playgroud)
不幸的是,Oracle没有一种方法(如果可能)进行转换,否则将返回NULL。SQL Server最近try_convert()
为此目的而引入。
一种选择是为失败的转换编写带有异常处理程序的函数。异常处理程序只会返回NULL
错误的格式。