регистр для разных столбцов даты - PullRequest
0 голосов
/ 30 мая 2018

Я сталкиваюсь с проблемами при написании приведенного ниже кода в SQL-разработчике:

 'If Trim$(psFromDate) <> "" and NOT ISNULL(psFromDate) AND Trim$(psToDate) <> "" and NOT ISNULL(psToDate) Then
select case ps_datetype
 CASE "CTA"
    wc = wc & " AND (trunc(sf_get_local (p_con.created_date,p_con.cdate_tz_code)) Between "
    wc = wc & " TO_DATE (" & "'" & sFromDate & "'" & ", 'DD/MM/YYYY') "
    wc = wc & " AND TO_DATE (" & "'" & sToDate & "'" & ", 'DD/MM/YYYY'))"
 'CASE "ATA" 
 CASE "VAD" 
    wc = wc & " AND trunc(sf_get_local(route_s.orgn_vsl_arvl_date,route_s.orgn_vsl_arvl_date_tz_code)) Between "
    wc = wc & " TO_DATE (" & "'" & sFromDate & "'" & ", 'DD/MM/YYYY') "
    wc = wc & " AND TO_DATE (" & "'" & sToDate & "'" & ", 'DD/MM/YYYY')"
 CASE "ETA"
    wc = wc & " AND TRUNC(sf_get_local(route_s.arrival_date,route_s.arrival_date_tz_code)) Between "
    wc = wc & " TO_DATE (" & "'" & sFromDate & "'" & ", 'DD/MM/YYYY') "
    wc = wc & " AND TO_DATE (" & "'" & sToDate & "'" & ", 'DD/MM/YYYY')"
END SELECT
'End If

Я попробовал приведенный ниже код, но безуспешно:

Where (case when pstatustype='CTA' then (p_con.created_date Between     to_date('&1','DD-MON-YYYY:HH24:MI:SS')
                                AND to_date('&2','DD-MON-YYYY:HH24:MI:SS'))
        when pstatustype='VAD' then (route_s.orgn_vsl_arvl_date Between     to_date('&1','DD-MON-YYYY:HH24:MI:SS')
                                AND to_date('&2','DD-MON-YYYY:HH24:MI:SS'))
        when pstatustype='ETA'  then (route_s.arrival_date Between  to_date('&1','DD-MON-YYYY:HH24:MI:SS') 
                                AND to_date('&2','DD-MON-YYYY:HH24:MI:SS'))
        else NULL end)

получаю ошибку, в которой отсутствуют скобки.В этом случае он не принимает между оператором.Пожалуйста, помогите, как я могу написать этот код в SQL разработчика.

С уважением, fuko

1 Ответ

0 голосов
/ 30 мая 2018

Вы не можете помещать другие условия в предложения выражения выражения.

Вы можете либо переключиться на более простую логическую логику:

Where (pstatustype='CTA' AND p_con.created_date Between to_date('&1','DD-MON-YYYY:HH24:MI:SS')
        AND to_date('&2','DD-MON-YYYY:HH24:MI:SS'))
   OR (pstatustype='VAD' AND route_s.orgn_vsl_arvl_date Between to_date('&1','DD-MON-YYYY:HH24:MI:SS')
        AND to_date('&2','DD-MON-YYYY:HH24:MI:SS'))
   OR (pstatustype='ETA' AND (route_s.arrival_date Between  to_date('&1','DD-MON-YYYY:HH24:MI:SS')
        AND to_date('&2','DD-MON-YYYY:HH24:MI:SS'))

, либо просто выбрать соответствующий столбец даты в регистре.выражение и сравнить это с одним диапазоном дат:

Where case when pstatustype='CTA' then p_con.created_date
           when pstatustype='VAD' then route_s.orgn_vsl_arvl_date
           when pstatustype='ETA' then route_s.arrival_date
           else null -- default anyway
      end Between to_date('&1','DD-MON-YYYY:HH24:MI:SS')
              AND to_date('&2','DD-MON-YYYY:HH24:MI:SS')
...