Я пытался заставить функцию работать в db2:
CREATE FUNCTION TO_DATE8(DATE_STRING numeric(8,0)) RETURNS DATE LANGUAGE SQL IF DATE_STRING > 0 THEN // ERROR -> RETURN DATE ( TO_DATE ( SUBSTR ( DATE_STRING , 1 , 8 ) , 'YYYYMMDD' ) ) ELSE RETURN DATE ( TO_DATE ( '00000000' , 'YYYYMMDD' ) ) END IF END
ОШИБКА: ДАТА НЕДОПУСТИМА
Что делать?
Форма требуемой процедуры выглядит следующим образом (по крайней мере, в версии iSeries):
CREATE FUNCTION TO_DATE8(DATE_STRING numeric(8,0)) RETURNS DATE LANGUAGE SQL BEGIN RETURN(CASE WHEN DATE_STRING > 0 THEN DATE(SUBSTR(DATE_STRING, 1, 4) || '-' || SUBSTR(DATE_STRING, 5, 2) || '-' || SUBSTR(DATE_STRING, 7, 2)) ELSE DATE('0001-01-01') END); END
Однако:
DATE_STRING
string
char
dateToConvert
0
*loval
null
Для блага других это можно сделать в одной строке, а не функцией:
СЛУЧАЙ, КОГДА MYDATE = 0 ПОСЛЕ НЕДОПУСТИМОЙ ДАТЫ (ВСТАВИТЬ (ВСТАВИТЬ (ВЛЕВО (CHAR (MYDATE), 8), 5,0, '-'), 8,0, '-')) END
В моем чемодане было 8 упакованных вещей.