我有两个INTEGER
列,如下所示:
Month Year
----- -----
5 2011
有没有办法将其转换为单个列VARCHAR
,如下所示:May-2011
答案 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)
假设列Month
和Year
是整数而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