查询未给出正确的结果。我将在01年12月14日至12月30日期间提交提交日期,但会在11月份获得结果。
SELECT DISTINCT O.id,
pg.name,
pt.name,
PP.company_name,
PP.code,
O.order_number,
O.status,
O.submit_date,
O.approval_date
FROM orders O,
partnerprofile PP,
partnertype pt,
partnergroup pg
WHERE PP.id = O.to_partner_id
AND Pp.type_id (+) = 8
AND o.ordering_ratio_flag = Decode('NO', 'YES', '1',
'NO', '0')
AND pp.group_id = pg.id
AND Pp.type_id(+) = Pt.id
AND Decode(NULL, NULL, '1',
Pp.code) = Decode(NULL, NULL, '1',
NULL)
AND submit_date BETWEEN Decode('01-Dec-14', NULL, ( '01-JAN-01' ),
'01-Dec-14') AND
Decode('30-Dec-14', NULL, ( '01-JAN-01' ),
'30-Dec-14')
AND approval_date BETWEEN Decode(p_approved_from, NULL, ( '01-JAN-01' ),
p_approved_from) AND
Decode(
p_approved_to, NULL, ( '01-JAN-01' ),
p_approved_to
)
AND Decode(p_status, NULL, '1',
O.status) = Decode(p_status, NULL, '1',
p_status)
ORDER BY O.id;
答案 0 :(得分:0)
除了评论总是使用to_date
/ datefunctions,如果你确实有日期数据类型,你使用解码是没有意义的:
Decode('01-Dec-14', NULL, ( '01-JAN-01' ), '01-Dec-14')
--this is always (!) '01-Dec-14'
解码“if then else”的工作原理如下:
SELECT product_id,
DECODE (warehouse_id, 1, 'Southlake',
2, 'San Francisco',
3, 'New Jersey',
4, 'Seattle',
'Non domestic')
"Location of inventory" FROM inventories
WHERE product_id < 1775;
此示例解码值warehouse_id。如果warehouse_id为1,则函数返回'Southlake';如果warehouse_id为2,则返回'旧金山';等等。如果warehouse_id不是1,2,3或4,则函数返回'Non domestic'。
(http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions040.htm)
在您的情况下,您始终会检查固定值'01-Dec-14'
,因为这不是null
返回的其他情况'01-Dec-14'
。