我从一组表中提取数据,这些表需要一个以数据为列的where子句。 我的团队在每次运行查询时手动输入日期都会出错。我想编写一个PL SQL来从数据库(oracle)动态获取日期字段。 以下是查询。
select oli.cart_key,lext.minor_order_number,wlkp.mf_wh_loc_id,oli.warehouse_type from tab1 oli,tab2 lext,tab3 wlkp where
oli.cart_line_key = lext.cart_line_key and
oli.warehouse_code = wlkp.warehouse_code and
oli.warehouse_type = 'DC' and
lext.fulfillment_partner_key = 106 and
lext.order_status_secondary = 2000 and
lext.date_sent_to_fp is not null and
to_char(lext.date_sent_to_fp ,'DD-MON-YYYY HH24:MI:SS') >= ('01-APR-2014 03:00:00') and
oli.active_flag = 'Y' and wlkp.active_flag = 'Y'
order by wlkp.mf_wh_loc_id
日期字段' 01-APR-2014 03:00:00'是我想从双表中得到的东西。是否可以这样做?
请告诉我。
此致 阿伦
答案 0 :(得分:1)
请将日期作为日期类型进行比较。你不希望根据字母表(DEC< NOV)进行比较。它不仅非常简单,而且还可以在每条记录中保存对to_char函数的调用(1毫秒记录,1毫秒调用!!)。
select oli.cart_key,
lext.minor_order_number,
wlkp.mf_wh_loc_id,
oli.warehouse_type
from tab1 oli,
join tab2 lext on oli.cart_line_key = lext.cart_line_key
join tab3 wlkp ON oli.warehouse_code = wlkp.warehouse_code
where oli.warehouse_type = 'DC'
and lext.fulfillment_partner_key = 106
and lext.order_status_secondary = 2000
and lext.date_sent_to_fp is not null
and lext.date_sent_to_fp >= Trunc(SYSDATE) +3/24
and oli.active_flag = 'Y'
and wlkp.active_flag = 'Y'
order by wlkp.mf_wh_loc_id
更新:如果您在4月1日凌晨3点运行查询,并且您的数据库位于同一时区,则无需执行任何操作。 Sysdate将在凌晨3点接受该日期的谷歌。
但是如果您想将值更改为今天的3.AM,只需将“SYSDATE”更改为“Trunc(SYSDATE)+3/24”,从新时间戳中删除时间信息并添加3小时。
注意:
答案 1 :(得分:0)
如果您想获得当前日期,可以使用SYSDATE
select oli.cart_key,lext.minor_order_number,wlkp.mf_wh_loc_id,oli.warehouse_type from
tab1 oli,tab2 lext,tab3 wlkp
where
oli.cart_line_key = lext.cart_line_key and
oli.warehouse_code = wlkp.warehouse_code and
oli.warehouse_type = 'DC' and
lext.fulfillment_partner_key = 106 and
lext.order_status_secondary = 2000 and
lext.date_sent_to_fp is not null and
to_char(lext.date_sent_to_fp ,'DD-MON-YYYY HH24:MI:SS') >=
(SELECT TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') FROM DUAL) and
oli.active_flag = 'Y' and wlkp.active_flag = 'Y'
order by wlkp.mf_wh_loc_id