如何使用TO_DATE函数处理空值?

时间:2019-05-31 12:12:27

标签: sql oracle

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

示例

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

当STARTDATEMONTH列为空时,

  

获取无效的月份

错误

当STARTDATEYEAR列为空时,我得到:

  

输入值的日期格式不足

错误

在这种情况下,这些值为null,我想设置一个默认值。有可能还是有解决方法?

我希望已经很好地解释了我的问题。预先感谢

4 个答案:

答案 0 :(得分:4)

使用合并:

select TO_DATE(coalesce(STARTDATEMONTH,'01')||'-01-'||coalesce(STARTDATEYEAR, '2019'), 'MM-DD-YYYY' ) AS BEGIN_DATE
from Mytable

Coalesce和nvl是相似的,但是结盟是ansi友好的,并且在找到值时终止。注意,这些值必须是相同的数据类型,例如:

coalesce(stringvalue1, stringvalue2)

答案 1 :(得分:2)

使用coalesce()

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

答案 2 :(得分:0)

您可以尝试以下方法吗?

  

SELECT TO_DATE(coalesce(STARTDATEMONTH,'01')||'-01-'||   从开始日期BEGIN_DATE起合并(STARTDATEYEAR,'1700'),'MM-DD-YYYY')   V_MYCC_CNPHISTORY_03

答案 3 :(得分:0)

您可以试试这个-

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