Как конвертировать / извлечь из ГГГГММ в год и название месяца? Терадата SQL - PullRequest
0 голосов
/ 05 февраля 2020

Итак, я получил формат даты в ГГГГММ (например, 201910 для октября 2019 года), и я хочу получить 2019 и октябрь (в полном названии месяца). Номер года легко, но получить название месяца немного сложно.

В моих данных Calendar_Year_Month - это доступное поле в формате INT, например. 201910. Сначала я преобразовал в STRING, а затем добавил случайный день 01, чтобы он стал 20191001, а затем преобразовал его в формат DATE как Year_Month_Date.

CAST(Calendar_Year_Month*100+01 AS VARCHAR(8)) AS Year_Month,
CAST(Year_Month AS DATE FORMAT 'YYYYMMDD')AS Year_Month_Date,

Я пытался использовать `TO_DATE (Year_Month_Date, 'Month) '), чтобы получить название месяца, однако, кажется, не работает.

Есть ли другие варианты для достижения?

Ответы [ 3 ]

1 голос
/ 05 февраля 2020

Вы были близки:

CAST int для даты и затем примените TO_CHAR:

To_Char(Cast((Calendar_Year_Month-190000) * 100 + 1 AS DATE), 'Month') AS cal_month

Извлечение года очень просто:

Calendar_Year_Month/100 as cal_year
1 голос
/ 05 февраля 2020

Вы пробовали:

1.

С to_char

to_char(Year_Month_Date, 'Month')

2.

Вы всегда можете добавить СЛУЧАЙ КОГДА на все 12 месяцев, если не найдете более простого решения ...

3.

С форматом:

Year_Month_Date(format 'MMMM')

или для комбинации с годом:

Year_Month_Date(format 'MMMMBYYYY')
0 голосов
/ 05 февраля 2020

Если ваш Calendar_Year_Month хорошо отформатирован, вот один из способов сделать это:

SELECT 
  SUBSTRING(CAST(Calendar_Year_Month AS CHAR(6)) FROM 1 FOR 4) AS MyYear -- Extract year
  CASE SUBSTRING(CAST(Calendar_Year_Month AS CHAR(6)) FROM 5 FOR 2) -- Extract month
    WHEN '01' THEN 'January'
    WHEN '02' THEN 'February'
    WHEN '03' THEN 'March'
    WHEN '04' THEN 'April'
    WHEN '05' THEN 'May'
    WHEN '06' THEN 'June'
    WHEN '07' THEN 'July'
    WHEN '08' THEN 'August'
    WHEN '09' THEN 'September'
    WHEN '10' THEN 'October'
    WHEN '11' THEN 'November'
    WHEN '12' THEN 'December'
  END CASE AS MyMonth
FROM MyTable

Другой вариант - попытаться преобразовать Calendar_Year_Month в DATE и использовать TO_CHAR():

SELECT 
  CAST(CAST(Calendar_Year_Month AS CHAR(6)) AS DATE FORMAT 'YYYYMM') AS MyDate,
  TO_CHAR(MyDate,'Month') AS MyMonth,
  TO_CHAR(MyDate,'YYYY') AS MyYear
FROM MyTable

У меня нет системы TD для тестирования, но попробуйте и дайте мне знать.

...