我希望使用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
答案 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
的值,而不一定是您在上面列出的“漂亮”格式。