将整数转换为天

时间:2013-10-02 16:15:45

标签: sql casting db2 converter

我希望使用db2数据库将整数转换为Days。整数的格式为20130101或YYYYMMDD。我相信你必须在将整数转换为char后编写自定义函数,但我不确定如何进行第二次转换为DAYS。我正在寻找从20130101年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 

2 个答案:

答案 0 :(得分:2)

您可以使用:

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

结果是:

January, 1, 2013

用字段名替换整数20130101。

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

你也可以使用aritmetics切割几个角落来获得年复一年,例如:

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

结果是一样的。

答案 1 :(得分:1)

这是一个很多的投射,但你可以使用TIMESTAMP_FORMAT函数:

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

请注意,这只会获得一个实际DATE的值,而不一定是您在上面列出的“漂亮”格式。

相关问题