Преобразование даты в DB2 - PullRequest
0 голосов
/ 18 мая 2011

У меня есть 2 INTEGER столбцы, подобные следующим:

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

Есть ли способ преобразовать это в один столбец VARCHAR, например: May-2011

Ответы [ 5 ]

1 голос
/ 18 мая 2011

Я думаю, что это сделает это:

SELECT
MONTHNAME(
  DATE(CAST(Year AS CHAR(4)) || '-' || TRIM(CAST(Month AS CHAR(2))) || '-1')
) || '-' || CAST(Year AS CHAR(4))
FROM TABLE
1 голос
/ 18 мая 2011

Это должно сработать, предполагая, что столбцы Month и Year являются целыми числами, а Месяц имеет домен 1-12:

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

Если Month равно 0, вы получите '---' в качестве месяца; если оно меньше 0 или больше 12, вы получите что-то вроде кровавого эффекта.

1 голос
/ 18 мая 2011

Я не знаю простого способа сделать это, так как у вас нет объекта даты (т. Е. Вы не находите месяц для отметки времени), вы можете использовать оператор case, но он становится длинным.

SELECT CASE Month
            WHEN '1' THEN 'January'
            WHEN '2' THEN 'February'
            WHEN '3' THEN 'March'
            WHEN '4' THEN 'April'
            ...
      END+'-'+Year
FROM TABLE
0 голосов
/ 14 февраля 2014

Я понимаю, что этот вопрос довольно старый, но есть способ, который намного проще, чем любой из перечисленных здесь вариантов (на мой взгляд) - комбинация некоторой математики даты и VARCHAR_FORMAR() функция:

SELECT 
    VARCHAR_FORMAT(
         DATE('0001-01-01') + (month_col - 1) MONTH + (year_col - 1) YEAR
        ,'Month-YYYY'
    )
FROM your_table
0 голосов
/ 27 мая 2011

Вы можете создать функцию для преобразования значения месяца, например так ...

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...