我试图让函数在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
错误:日期无效
怎么办?
答案 0 :(得分:2)
所需程序的形式似乎是这样的(至少在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
),它是数字。请将其重命名为 not 包含数据类型的内容(dateToConvert
正常工作)0
s)的内容。我在这里返回*loval
,虽然它可能实际上应该是null
。答案 1 :(得分:1)
对于其他人的利益,这可以在一行而不是一个函数中完成:
当MYDATE = 0时的情况那么空的日期(插入(插入(左(CHAR(MYDATE),8),5,0,' - '),8,0,' - '))结束
MYDATE在我的案子中被打包了。