SELECT
DATE (TIMESTAMP_FORMAT (CHAR(BWDUED), 'YYYYMMDD')) AS DUE_DATE,
CURRENT DATE AS TODAY_DATE
FROM
(
VALUES
--0 ,
--20221232,
INT (TO_CHAR (CURRENT DATE, 'YYYYMMDD'))
) T (BWDUED)
WHERE
DATE (TIMESTAMP_FORMAT (CHAR(BWDUED), 'YYYYMMDD')) = CURRENT_DATE
CREATE OR REPLACE FUNCTION TO_DATE_SAFE
(
P_STR VARCHAR (128)
, P_FMT VARCHAR (128)
)
RETURNS TIMESTAMP
CONTAINS SQL
NO EXTERNAL ACTION
DETERMINISTIC
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
RETURN CAST (NULL AS TIMESTAMP);
END;
RETURN TO_DATE (P_STR, P_FMT);
END
2条答案
按热度按时间6jjcrrmo1#
看一下TIMESTAMP_FORMAT,它允许指定输入格式,然后返回一个TIMESTAMP或DATE。
fafcakar2#
出现此问题的原因是某些行包含的数字无法使用指定模式格式化为时间戳。
请考虑以下示例,如果您取消注解任何已注解掉的行,则返回完全相同的错误。
解决方案是创建一个“安全”的格式化程序函数,以避免可能的错误,并使用它来代替
TIMESTAMP_FORMAT
(或同义词TO_DATE
函数)。