Как бороться с нулевыми значениями с помощью функции TO_DATE? - PullRequest
2 голосов
/ 31 мая 2019

Я хочу создать DATETIME по частям, но в некоторых случаях эти части нулевые.

* ** 1003 тысяча два * Пример
SELECT TO_DATE(STARTDATEMONTH||'-01-'||STARTDATEYEAR, 'MM-DD-YYYY' ) AS BEGIN_DATE FROM V_MYCC_CNPHISTORY_03

Если столбец STARTDATEMONTH равен нулю,

получить недействительный месяц

ошибка

Когда столбец STARTDATEYEAR равен нулю, я получаю:

недостаточно введенное значение для формата даты

ошибка

В случаях, когда значения равны нулю, я хотел бы установить значение по умолчанию. Это возможно или есть какое-то решение?

Я надеюсь, что объяснил мою проблему хорошо. Заранее спасибо

Ответы [ 4 ]

4 голосов
/ 31 мая 2019

Использовать коалесц

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

Coalesce и nvl похожи, но coalesce одновременно и дружелюбен, и завершается, когда находит значение. Обратите внимание, что значения должны быть одного типа данных, например:

coalesce(stringvalue1, stringvalue2)
2 голосов
/ 31 мая 2019

Использование coalesce():

SELECT TO_DATE(COALESCE(STARTDATEMONTH, '01') || '-01-' || COALESCE(STARTDATEYEAR, '2000')), 'MM-DD-YYYY' ) AS BEGIN_DATE
FROM V_MYCC_CNPHISTORY_03
0 голосов
/ 31 мая 2019

Вы можете попробовать это-

SELECT TO_DATE(NVL(STARTDATEMONTH,'01')||'-01-'||NVL(STARTDATEYEAR,'2019'), 'MM-DD-YYYY' ) AS BEGIN_DATE 
FROM V_MYCC_CNPHISTORY_03
0 голосов
/ 31 мая 2019

Можете ли вы попробовать следующее:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...