#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)
Если ваша дата не сохраняется как дата, вам следует исправить данные. Но при отсутствии этого вы можете преобразовать его в выражение.