2011-05-17 106 views
0

我有2分INTEGER列如下所示:DB2日期转换

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

有没有办法将其转换成一列VARCHAR这样的:May-2011

回答

1

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

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

我想这会做到这一点:

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

这应该做的伎俩,假设列MonthYear是整数,一个月域1-12:

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

如果Month为0,你会得到'---'作为月;如果它小于0或大于12,你会得到某种恶作剧。

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) 
0

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

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