Я должен получить месяц и год из столбца due_dt и передать его в качестве ввода в sql - PullRequest
0 голосов
/ 24 февраля 2020
select sum(NVL(CL.TOTAL_REPAY_AMT,0) + NVL(re.INSURANCE_DUE_AMT,0)) as installment_amount
       , sum(RE.LI_DUE_AMT) as life_insurance
       , sum(RE.PI_DUE_AMT) as property_insurance
       , (SUM(NVL(CL.TOTAL_REPAY_AMT,0) + NVL(re.INSURANCE_DUE_AMT,0)) + SUM(RE.LI_DUE_AMT) + SUM(RE.PI_DUE_AMT)) as total_amount
       , count(cl.ref_num_1) as Count_loans
       , SUM(cl.DR_INTRST_RT) AS INTREST
from cr_loan cl
join repayment_events re on cl.pos_num = re.pos_num 
and CL.DR_INTRST_RT = 0
and RE.LAST_EVENT_STAT IN (1,11) 
AND RE.DUE_DT = '01-JUNE-2083'

Я пытаюсь извлечь месяц и год и передать их в качестве входных данных для столбца due_dt. Я попытался использовать подстроку, но это не сработало:

SUBSTR(RE.DUE_DT, 4,15) ='JUNE-2083'

Пожалуйста, помогите мне

Ответы [ 5 ]

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

Ответ зависит от типа данных RE.DUE_DT столбца.

Если это DATE, укажите для него дату:

AND RE.DUE_DT = date '2083-06-01'

Относительно того, что вы написали ("I я пытаюсь извлечь месяц и год и передать их в качестве входных данных для столбца due_dt "), это может быть

AND RE.DUE_DT >= date '2083-06-01' 
AND RE.DUE_DT <  date '2083-07-01'

Если это VARCHAR2, что он содержит? Если это что-то вроде '06.2083'. В этом случае вы просто предоставите соответствующую строку:

AND RE.DUE_DT = '06.2083'

По сути, вся проблема восходит к первому предложению, которое я написал.

0 голосов
/ 24 февраля 2020

Как уже спрашивали другие, подтвердите тип данных столбца DUE_DT

select data_type from all_tab_cols where table_name = 'REPAYMENT_EVENTS' and column_name = 'DUE_DT' ;

Предполагая, что это date:

    select sum(NVL(CL.TOTAL_REPAY_AMT,0) + NVL(re.INSURANCE_DUE_AMT,0)) as installment_amount
           , sum(RE.LI_DUE_AMT) as life_insurance
           , sum(RE.PI_DUE_AMT) as property_insurance
           , (SUM(NVL(CL.TOTAL_REPAY_AMT,0) + NVL(re.INSURANCE_DUE_AMT,0)) + SUM(RE.LI_DUE_AMT) + SUM(RE.PI_DUE_AMT)) as total_amount
           , count(cl.ref_num_1) as Count_loans
           , SUM(cl.DR_INTRST_RT) AS INTREST
    from cr_loan cl
    join repayment_events re on cl.pos_num = re.pos_num 
    and CL.DR_INTRST_RT = 0
    and RE.LAST_EVENT_STAT IN (1,11) 
    -- AND RE.DUE_DT = '01-JUNE-2083'
    and TO_CHAR(RE.DUE_DT,'MM-YYYY') = '06-2083'
    ;
0 голосов
/ 24 февраля 2020

Пожалуйста, используйте ниже

replace(to_char(RE.DUE_DT,'MONTH-yyyy'),' ','')='JUNE-2083'
0 голосов
/ 24 февраля 2020

Звучит так, как вы хотите:

where due_dt >= to_date(:year || '-' || :month, 'YYYY-MM') and
      due_dt < add_months(to_date(:year || '-' || :month, 'YYYY-MM'), 1)
0 голосов
/ 24 февраля 2020

Я думаю, что вы используете ORACLE. Вы можете написать, как указано ниже:

TO_CHAR(RE.DUE_DT,'month-YYYY') ='JUNE-2083'

TO_CHAR

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...