不同日期列的案例陈述
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')
我在 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')