在DB2 iSeries中将CHAR转换为TIMESTAMP

MRi*_*izq 1 time-series ibm-midrange

我正在谷歌搜索如何在没有运气的情况下将CHAR转换为DB2 iSeries中的TIMESTAMP,你能帮助我吗?

例如:20120216

预期成果:16/2/2012 12:00:00 AM

我的UDF:

CREATE FUNCTION TEST.CONVERT_TO_TIMESTAMP (VAL CHARACTER VARYING(20))
RETURNS TIMESTAMP
LANGUAGE SQL
SPECIFIC TEST.CONVERT_TO_TIMESTAMP
MODIFIES SQL DATA
CALLED ON NULL INPUT
FENCED
DISALLOW PARALLEL
NO EXTERNAL ACTION
BEGIN ATOMIC
DECLARE SQLCODE INTEGER DEFAULT 0 ;
DECLARE RETCODE INTEGER DEFAULT 0 ;
DECLARE RET TIMESTAMP ;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION , SQLWARNING , NOT FOUND
BEGIN
SET RETCODE = SQLCODE ;
END ;

IF ( VAL IS NOT NULL ) THEN
SET RET = CAST ( VAL AS TIMESTAMP ) ;
 ELSE
SET RET = NULL ;
  END IF ;

 RETURN RET ;

 END 
 GO
Run Code Online (Sandbox Code Playgroud)

-

结果是null :(

有什么建议吗?

谢谢MRizq

Buc*_*bro 5

要将CAST作为时间戳,需要将值格式化为有效日期.'20120216'并不存在,它需要破折号:'2012-02-16'.如果您不能让调用者重新格式化输入,您必须自己按照以下方式执行此操作:

cast(date(substr(val,1,4) concat '-' 
   concat substr(val,5,2) concat '-' 
   concat substr(val,7,2)) as timestamp)
Run Code Online (Sandbox Code Playgroud)