Как сгенерировать FY из столбца даты в Db2

#sql #db2

#sql #db2

Вопрос:

У меня есть один столбец в моей таблице Db2, в котором у меня есть данные в формате ‘ГГГГММДД’. Мне нужно создать финансовый год из этого столбца, поэтому, если месяц приходится на январь, февраль или март, тогда в финансовом году мне нужно сгенерировать как предыдущий год ‘-‘текущий год, иначе текущий год ‘ -‘следующий год.

В моей исходной таблице у меня есть столбец MTH_YR как ‘20210101’.Я могу сгенерировать дату из этого столбца как 2021-01-01 теперь из этого столбца мне нужно определить Fy как 2020-2021, который я пишу ниже Запрос

     select substring(MTH_YR, 1, 4) || '-' || substring(MTH_YR, 5, 2) || '-' || 
    substring(MTH_YR, 7, 2)  as date_format,
    CASE WHEN month(to_date(date_format)) IN (01,02,03) THEN 
    CONCAT(CONCAT(year(to_date(date_format))-1,'-'),substr(year(to_date(date_format)),3,4)) 
    ELSE 
    CONCAT(CONCAT(year(to_date(date_format)),'-'),SUBSTR(year(to_date(date_format)) 1,3,4))
    end as FY from schemaname.Tablename;
 

Но получаю ошибку ниже.

     "FY" is not valid in the context where it is used.. SQLCODE=-206, SQLSTATE=42703, DRIVER=4.24.92
 

Может кто-нибудь, пожалуйста, подскажите мне, как мне реализовать то же самое.

Комментарии:

1. Вы не можете ссылаться на псевдонимы столбцов, особенно date_format в том же списке выбора.

2. Вы сохраняете дату как строку, а не как a date ? Если да, то почему?

Ответ №1:

Если вы сохранили свою дату как дату, вы бы просто вычли 3 месяца и взяли год:

 select year(add_months(date_col, -3)) as fiscal_year
 

Вы можете сделать это строковым представлением, если хотите:

 select year(add_months(date_col, -3)) || '-' || (year(add_months(date_col, -3))   1)
 

Если ваша дата не сохраняется как дата, вам следует исправить данные. Но при отсутствии этого вы можете преобразовать его в выражение.