不同日期列的案例陈述

case statements for different date columns

我在 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)

收到缺少括号的错误。然后它不采用 BETWEEN 运算符。 请帮助,我如何在 SQL 开发人员中编写此代码。

此致, 枫子

不能在 case 表达式子句中放置其他条件。

您可以切换到更简单的布尔逻辑:

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')