【问题标题】:convert integer to Days将整数转换为天
【发布时间】:2013-10-03 01:53:25
【问题描述】:

我希望使用 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 

【问题讨论】:

  • “转换为 DAYS”是什么意思?在 DB2 中,有一个 DAYS() 函数将日期转换为表示自 '01/01/0001' 以来的天数的整数,但您表明您需要 January 1, 2013
  • 天数与 YYYYMMDD 格式的数字非常不同。
  • 日期实际上是我正在寻找的,而伊恩的回答成功了。

标签: sql casting db2 converter


【解决方案1】:

你可以用这个:

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

结果是一样的。

【讨论】:

    【解决方案2】:

    很多转换,但你可以使用TIMESTAMP_FORMAT函数:

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

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

    【讨论】:

    • 只是想补充一点,Ian 的转换可以进一步简化,结果如下:to_date(start_date,''YYYYMMDD'')。这是因为 int 到 char 的转换是隐式的。
    • @Ricardo 这很好,我仍然停留在 9.7-cast-everything 之前的模式。但从技术上讲,如果您想要实际的 DATE 而不是 TIMESTAMP,则正确的表达式是 date(to_date(start_date,'YYYYMMDD'))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2010-09-28
    • 2014-01-10
    • 2011-10-05
    • 1970-01-01
    相关资源
    最近更新 更多