1

我正在寻找使用 db2 数据库将整数转换为天数。整数的格式为 20130101 或 YYYYMMDD。我相信您必须在将整数转换为字符后编写自定义函数,但我不确定如何将第二次转换为 DAYS。我正在寻找从 20130101 到 2013 年 1 月 1 日的返回格式。

  WITH
/*****************************************************
*** Sample Data  ***
*****************************************************/
 sample_data
( START_DATE , END_DATE ) AS 
(
VALUES
  (20130101, 20131227 ) 
, (20130930, 20131230 ) 
, (20130411, 20130912 )
, (20130410, 20140101 )


)
,

            t2(START_DATE, END_DATE) AS
    ( SELECT    

            CAST(SUBSTR(START_DATE, 1,4) CONCAT '-'
            CONCAT SUBSTR(START_DATE, 5,2) CONCAT '-'
            CONCAT SUBSTR(START_DATE, 7,2) AS CHAR(15)), 
            CAST(SUBSTR(END_DATE, 1,4) CONCAT '-'
            CONCAT SUBSTR(END_DATE, 5,2) CONCAT '-'
            CONCAT SUBSTR(END_DATE, 7,2) AS CHAR(15)) 

    FROM SAMPLE_DATA

    )

    SELECT
                START_DATE,
                END_DATE
    FROM t2 
4

2 回答 2

2

你可以使用这个:

select monthname(to_date(20130101, 'YYYYMMDD')) || ', ' || 
    day(to_date(20130101, 'YYYYMMDD')) || ', ' || 
    year(to_date(20130101, 'YYYYMMDD')) from sysibm.sysdummy1

结果是:

January, 1, 2013

将整数 20130101 替换为您的字段名称。

如果您将在多个地方使用转换,最好创建一个函数以避免重复字段和转换。

您还可以使用算术计算获得年份和日期,例如:

select monthname(to_date(20130101, 'YYYYMMDD')) || ', ' || 
    mod(20130101, 100) || ', ' || to_char(20130101 / 10000) from sysibm.sysdummy1

结果是一样的。

于 2013-10-02T17:45:36.570 回答
1

这是很多铸造,但你可以使用这个TIMESTAMP_FORMAT功能:

date(timestamp_format(char(start_date),'YYYYMMDD'))

请记住,这只会为您提供一个实际的值,DATE不一定是您上面列出的“漂亮”格式。

于 2013-10-02T17:07:14.130 回答