将十进制转换为日期



我有一列的日期格式为小数,例如:20210830。

我想把这个号码转换成08/30/2021的日期格式

我尝试过使用convert,但数据库向我发出了一个错误,即convert不是一个有效的函数。Cast似乎有效,但每次只返回一个null值。

此声明将验证:

SELECT CAST(CAST(CONTCLMPDTE AS VARCHAR(8)) AS DATE) 
FROM CMSFIL.JCTDSC AS COMPLDATE 

此语句有效,但仅输出null。作为背景,我正在从Db2数据库中查询。

我的最终目标是使用这个转换后的日期来获取与当天的差异。

DAY(CURRENT_DATE) - DAY(COMPLDATE)

将其转换为日期,您可以像这样进行

CREATE TABLE JCTDSC (
CONTCLMPDTE varchar(10)

);

INSERT INTO JCTDSC VALUES ('20,220,830')
SELECT date(to_date(REPLACE(CONTCLMPDTE,',',''),'YYYYMMDD')) FROM JCTDSC AS COMPLDATE 
1
2022-08-30

经过漫长的几天,我几乎把头发都拔了出来,下面是对我有效的方法。

SELECT date(substr(CONTCLMPDTE,1,4)||'-'||substr(CONTCLMPDTE,5,2)||'-'||substr(CONTCLMPDTE,7,2)) FROM JCTDSC WHERE COMPANYNUMBER={Company Number} AND JOBNUMBER={Job Number} LIMIT 1

格式为从yyyymmdd到mm/dd/yyyy。它还使用此代码查找current_date和CONTCLMPDTE之间的天数。

DAYS(CURRENT_DATE) - DAYS({COntract Compl Date Formatted})

谢谢大家的帮助!

您可能会得到一个错误,因为您有一些INT/DECIMAL值,无法使用此模式转换为日期
解决方案是创建一些";"安全";转换函数";吃";错误如下。

CREATE FUNCTION DATE_SAFE (P_DT INT)
RETURNS DATE
CONTAINS SQL
NO EXTERNAL ACTION
DETERMINISTIC
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION 
BEGIN 
RETURN CAST (NULL AS DATE);
END;
RETURN DATE (TO_DATE (CAST (P_DT AS CHAR (8)), 'YYYYMMDD'));
END

用法:

SELECT 
CONTCLMPDTE
--, DATE (TO_DATE (CAST (CONTCLMPDTE AS CHAR (8)), 'YYYYMMDD'))
, DATE_SAFE (CONTCLMPDTE)
FROM (VALUES 0, 20220830) T (CONTCLMPDTE)

如果相应的INT不能转换为DATE,并且在只使用内置函数取消注释注释行时不会抛出错误,则函数返回NULL。

只需要将值转换为日期格式的字符串。然后可以使用date((函数将其转换为日期。

create table qtemp/dec_vals (
col1  decimal(8,0)  );
insert into qtemp/dec_vals
values (20200830),  (20200831),  (20200901),  (20200902),  (20200903),  (20200904),  (20200905),  (20200906);
select date(substr(char(col1), 5, 2) || '/' || substr(char(col1), 7, 2) || '/' || substr(char(col1), 1, 4))  from qtemp/dec_vals;

相关内容

  • 没有找到相关文章

最新更新