Sql 如何使用to_DATE函数处理空值?

Sql 如何使用to_DATE函数处理空值?,sql,oracle,Sql,Oracle,我想按部分创建DATETIME,但在某些情况下,这些部分是空的 示例 SELECT TO_DATE(STARTDATEMONTH||'-01-'||STARTDATEYEAR, 'MM-DD-YYYY' ) AS BEGIN_DATE FROM V_MYCC_CNPHISTORY_03 当STARTDATEMONTH列为空时 获取的日期不是有效的月份 错误 当STARTDATEYEAR列为空时,我得到: 输入值不够长,不适合日期格式 错误 如果值为空,我想设置一个默认值。这是可能的还是有解决办

我想按部分创建DATETIME,但在某些情况下,这些部分是空的

示例

SELECT TO_DATE(STARTDATEMONTH||'-01-'||STARTDATEYEAR, 'MM-DD-YYYY' ) AS BEGIN_DATE FROM V_MYCC_CNPHISTORY_03
当STARTDATEMONTH列为空时

获取的日期不是有效的月份

错误

当STARTDATEYEAR列为空时,我得到:

输入值不够长,不适合日期格式

错误

如果值为空,我想设置一个默认值。这是可能的还是有解决办法


我希望把我的问题解释清楚。提前感谢

您可以尝试以下方法吗:

选择到日期(合并(开始日期月,'01')| |'-01-'|| 合并(起始日期,'1700'),'MM-DD-YYYY')作为起始日期 V_MYCC_CNPC历史_03

使用合并:

select TO_DATE(coalesce(STARTDATEMONTH,'01')||'-01-'||coalesce(STARTDATEYEAR, '2019'), 'MM-DD-YYYY' ) AS BEGIN_DATE
from Mytable
Coalesce和nvl类似,但Coalesce都是ansi友好的,并且在找到值时终止。注意,这些值必须是相同的数据类型,例如:

coalesce(stringvalue1, stringvalue2)
使用
合并()

你可以试试这个-

SELECT TO_DATE(NVL(STARTDATEMONTH,'01')||'-01-'||NVL(STARTDATEYEAR,'2019'), 'MM-DD-YYYY' ) AS BEGIN_DATE 
FROM V_MYCC_CNPHISTORY_03

不是神谕的功用。我会解决的。我相信你的陈述中缺少了一个结束语-而不是
coalesce(STARTDATEYEAR,'2019','MM-DD-YYYY')
,它应该是
coalesce(STARTDATEYEAR,'2019','MM-DD-YYYY')
SELECT TO_DATE(NVL(STARTDATEMONTH,'01')||'-01-'||NVL(STARTDATEYEAR,'2019'), 'MM-DD-YYYY' ) AS BEGIN_DATE 
FROM V_MYCC_CNPHISTORY_03