1

db2 データベースを使用して整数を日数に変換しようとしています。整数の形式は 20130101 または YYYYMMDD です。整数を char に変換した後にカスタム関数を作成する必要があると思いますが、DAYS への 2 回目の変換を行う方法がわかりませんでした。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 をフィールド名に置き換えます。

複数の場所で変換を使用する場合は、フィールドと変換を繰り返さないように関数を作成することをお勧めします。

次のように、aritmetics を使用して年と日を取得するいくつかのコーナーをカットすることもできます。

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 に答える