DB2日期转换

时间:2011-05-17 22:38:31

标签: sql db2

我有两个INTEGER列,如下所示:

Month      Year
-----      -----
  5         2011

有没有办法将其转换为单个列VARCHAR,如下所示:May-2011

5 个答案:

答案 0 :(得分:1)

我不知道一个简单的方法,因为你没有日期对象(即它不像你找到时间戳的月份),你可以使用case语句,但它会变长。 / p>

SELECT CASE Month
            WHEN '1' THEN 'January'
            WHEN '2' THEN 'February'
            WHEN '3' THEN 'March'
            WHEN '4' THEN 'April'
            ...
      END+'-'+Year
FROM TABLE

答案 1 :(得分:1)

我认为这样做会:

SELECT
MONTHNAME(
  DATE(CAST(Year AS CHAR(4)) || '-' || TRIM(CAST(Month AS CHAR(2))) || '-1')
) || '-' || CAST(Year AS CHAR(4))
FROM TABLE

答案 2 :(得分:1)

假设列MonthYear是整数而Month具有域1-12:

select   substring('---JanFebMarAprMayJunJulAugSepOctNovDec', 3*Month , 3 )
       + '-'
       + right(digits(Year),4)
from some_table

如果Month为0,那么你将得到'---'作为月份;如果它小于0或大于12,你会得到某种诡异。

答案 3 :(得分:0)

你可以创建一个转换月份值的函数,就像这样...

CREATE FUNCTION INT2MONTH (MONTH INTEGER)
     RETURNS VARCHAR(100)
     LANGUAGE SQL
     CONTAINS SQL
     NO EXTERNAL ACTION
     DETERMINISTIC
     RETURN MONTHNAME('2000-' || RIGHT('0' || STRIP(CHAR(MONTH)), 2) || '-01')

然后你可以......

select int2month(month) || '-' || strip(char(year)) from test

1                                     
--------------------------------------------------
May-2011                                                          
June-2011                                                         
December-2012                                                     

如果你想要一个3个月的月份,那么将函数的最后一个更改为...

RETURN LEFT(MONTHNAME('2000-' || RIGHT('0' || STRIP(CHAR(MONTH)), 2) || '-01'), 3)

答案 4 :(得分:0)

我意识到这个问题很老了,但有一种方法比这里列出的任何选项都简单得多(在我看来) - 一些日期数学和VARCHAR_FORMAR()函数的组合:< / p>

SELECT 
    VARCHAR_FORMAT(
         DATE('0001-01-01') + (month_col - 1) MONTH + (year_col - 1) YEAR
        ,'Month-YYYY'
    )
FROM your_table