db2 正在将小数转换为日期

xmjla07d  于 2022-11-07  发布在  DB2
关注(0)|答案(4)|浏览(185)

我有一个日期格式为小数的列,例如:20,210,830.
我想将此数字转换为日期格式08/30/2021
我试过使用convert,数据库给我发了一个错误,说convert不是一个有效的函数。Cast似乎可以工作,但是每次只返回一个空值。
此语句将验证:

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

这个语句可以工作,但是只输出null。对于后台,我从Db2数据库查询。
我的最终目标是使用这个转换后的日期来获取与当前日期的差异。

DAY(CURRENT_DATE) - DAY(COMPLDATE)
6tqwzwtp

6tqwzwtp1#

转换为日期,可以这样做
第一个
| 一个|
| - -|
| 2022年8月30日|
fiddle

sr4lhrrt

sr4lhrrt2#

所以,经过漫长的几天,几乎把我的头发拉出来,这是什么对我的工作。

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})

谢谢大家的帮助!

7uhlpewt

7uhlpewt3#

您可能会得到一个错误,因为您有一些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,并且在仅使用内置函数取消注解已注解掉的行时,不会抛出错误。

lb3vh1jj

lb3vh1jj4#

只需要将值转换为日期格式的字符串,然后使用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;

相关问题