Sql 从传递标识符1,2,3的日期间隔中选择与日期对应的特定日期

Sql 从传递标识符1,2,3的日期间隔中选择与日期对应的特定日期,sql,oracle,Sql,Oracle,我试图从一个间隔日期中获得天数。示例:如果我给出的初始日期为2017年6月21日至2017年7月21日,我只想从该日期间隔中选择星期三和星期五,那么如何在oracle db中实现该日期 谢谢你的帮助 更新 CREATE OR REPLACE PROCEDURE "CHAIRA"."PR_SAVEROOMS" (v_return OUT SYS_REFCURSOR,INIDATE IN VARCHAR2,ENDDATE IN VARCHAR2,DAYS IN NUMBER) AS

我试图从一个间隔日期中获得天数。示例:如果我给出的初始日期为2017年6月21日至2017年7月21日,我只想从该日期间隔中选择星期三和星期五,那么如何在oracle db中实现该日期

谢谢你的帮助

更新

CREATE OR REPLACE PROCEDURE "CHAIRA"."PR_SAVEROOMS"
    (v_return OUT SYS_REFCURSOR,INIDATE IN VARCHAR2,ENDDATE IN VARCHAR2,DAYS IN NUMBER) AS
        v_error EXCEPTION;
        v_notificacion t_notificacion;
        -- variable del tipo varray[3] definida asi: [tipoNotificacion: |notificacion|notificacionPin|error|errorPin|advertencia|advertenciaPin|][tituloNotificacion][mensajeNotificacion]
   VARIABLE startDate varchar2;
   VARIABLE endDate varchar2;

BEGIN
:startDate := INIDATE;
:endDate := ENDDATE;

     SELECT day
FROM   ( 
  SELECT DATE TO_DATE(startDate, 'DD/MM/YYYY') + LEVEL - 1 as day
  FROM   DUAL
  CONNECT BY DATE TO_DATE(startDate, 'DD/MM/YYYY') + LEVEL - 1 <= DATE TO_DATE(endDate, 'DD/MM/YYYY')
)
WHERE day - TRUNC( day, 'IW' ) IN ( 2, 4 );

        v_notificacion := t_notificacion('notificacion','Información','Mensaje por defecto');
    OPEN v_return FOR SELECT v_notificacion(1) "_TIPO", v_notificacion(2) "_TITULO",v_notificacion(3)"_MENSAJE" FROM DUAL;
    EXCEPTION
        WHEN v_error THEN
            RAISE_APPLICATION_ERROR(-20333,v_notificacion(1)||'*'||v_notificacion(2)||'*'||v_notificacion(3)||'*');
            ROLLBACK;
 END; 
我已经根据MT0建议进行了更新&仍然会导致错误


我将VARCHAR DATE的格式设置为DD/MM/YYYY…

这将获得所有日期:

SELECT DATE '2017-06-21' + LEVEL - 1 as day
FROM   DUAL
CONNECT BY DATE '2017-06-21' + LEVEL - 1 <= DATE '2017-07-21';
更新:

添加绑定参数:

CREATE OR REPLACE PROCEDURE "CHAIRA"."PR_SAVEROOMS"(
  v_return OUT SYS_REFCURSOR,
  INIDATE IN VARCHAR2,
  ENDDATE IN VARCHAR2,
  DAYS IN NUMBER
)
AS
  v_error                  EXCEPTION;
  v_notificacion           t_notificacion;
  v_wednesdays_and_fridays SYS.ODCIDATELIST;  
BEGIN
  SELECT day
  BULK COLLECT INTO v_wednesdays_and_fridays
  FROM   ( 
    SELECT TO_DATE(iniDate, 'DD/MM/YYYY') + LEVEL - 1 as day
    FROM   DUAL
    CONNECT BY TO_DATE(iniDate, 'DD/MM/YYYY') + LEVEL - 1 <= TO_DATE(endDate, 'DD/MM/YYYY')
  )
  WHERE day - TRUNC( day, 'IW' ) IN ( 2, 4 );

  v_notificacion := t_notificacion('notificacion','Información','Mensaje por defecto');
  OPEN v_return FOR
    SELECT v_notificacion(1) "_TIPO",
           v_notificacion(2) "_TITULO",
           v_notificacion(3) "_MENSAJE"
    FROM DUAL;
EXCEPTION
  WHEN v_error THEN
    RAISE_APPLICATION_ERROR(-20333,v_notificacion(1)||'*'||v_notificacion(2)||'*'||v_notificacion(3)||'*');
    ROLLBACK;
END; 
/
由于我们使用的是sysdate,如果您在不同的日期运行脚本,您应该调整一些内容

select * from (SELECT TRUNC (SYSDATE + (ROWNUM*7)) dt
  FROM DUAL 
  CONNECT BY ROWNUM < 100 ) where dt between '21-JUN-17 00:00:00' and '21-JUL-17 00:00:00'
   ;

添加你的表结构你说的表结构是什么意思?这不只是过滤星期三和星期五,它取决于未来日期范围内的日期。如果我替换参数的初始和最终日期,它将导致错误。我怎样才能解决这个问题@MT0@HARRY已更新。我已更新我的帖子,但仍然导致错误@MT0@HARRY你不需要大喊大叫。更新-您没有对值执行任何操作,但它应该编译。
select * from (SELECT TRUNC (SYSDATE + (ROWNUM*7)) dt
  FROM DUAL 
  CONNECT BY ROWNUM < 100 ) where dt between '21-JUN-17 00:00:00' and '21-JUL-17 00:00:00'
   ;