首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Oracle SQL:检查时间是否在两个实例之间(不包括dd/mm/yyyy)

Oracle SQL:检查时间是否在两个实例之间(不包括dd/mm/yyyy)
EN

Stack Overflow用户
提问于 2015-10-15 20:36:54
回答 3查看 710关注 0票数 2

我正在构建一个Oracle APEX应用程序,在该应用程序中,记者可以将文章(导演为广播选择文章)与新闻阅读器(如果创建了广播就可以阅读文章)一起输入。我被困在以下几个方面:

我想要创建一个Oracle查询,当它的可用性(存储在另一个表“Beschikbaarheid”中)满足给定情况(用户开始时间在广播日>=广播开始时间,用户结束时间在广播日<=广播结束时间)时,选择" user“表中记录的名称和姓氏。我自己写了以下查询。

代码语言:javascript
复制
SELECT voornaam || ' ' || achternaam AS display_value, id AS return_value
FROM Gebruiker
WHERE id NOT IN (SELECT Nieuwslezerselectie.nieuwslezerid FROM Nieuwslezerselectie 
WHERE -- other conditions
AND id IN (SELECT gebruikerid 
           FROM Beschikbaarheid 
           WHERE (dag = to_char(to_date(:P91_DATUM,'DD-MON-YYYY'),'Day'))
           AND (to_date(:P91_BEGINTIJD,'HH24:MI') >= to_date(begintijd,'HH24:MI'))
           AND (to_date(:P91_EINDTIJD,'HH24:MI') <= to_date(eindtijd,'HH24:MI'))
          );

(对不起,如果你读这个有困难,我用荷兰语命名。)你可以随便问问是否有什么不清楚。)

但是,如果广播时新闻阅读器可用,则链接此查询的APEX选择列表将不会显示任何内容。我认为问题是"Begintijd“和"Eindtijd”存储为时间戳,因为值应该与日期无关(而时间戳不是),但我不知道如何存储它们。也许是个怪胎?

我真诚地希望你有什么想法。提前谢谢你!

Luc

更新1

在我已经重写了查询的帮助下,它现在看起来如下:

代码语言:javascript
复制
AND id IN (SELECT gebruikerid 
       FROM Beschikbaarheid
       WHERE (dag = to_char(to_date(:P91_DATUM,'DD-MON-YYYY'),'Day','NLS_DATE_LANGUAGE=Dutch'))
       AND (
            to_date('01-01-2000' || ' ' || to_char(to_timestamp(:P91_BEGINTIJD),'HH24:MI'),'DD-MM-YYYY HH24:MI') 
            BETWEEN
            to_date('01-01-2000' || ' ' || to_char(begintijd,'HH24:MI'),'DD-MM-YYYY HH24:MI')
            AND
            to_date('01-01-2000' || ' ' || to_char(eindtijd,'HH24:MI'),'DD-MM-YYYY HH24:MI')
           )
       AND (
            to_date('01-01-2000' || ' ' || to_char(to_timestamp(:P91_EINDTIJD),'HH24:MI'),'DD-MM-YYYY HH24:MI') 
            BETWEEN 
            to_date('01-01-2000' || ' ' || to_char(begintijd,'HH24:MI'),'DD-MM-YYYY HH24:MI')
            AND
            to_date('01-01-2000' || ' ' || to_char(eindtijd,'HH24:MI'),'DD-MM-YYYY HH24:MI')
           )
      );

但是,我现在得到的ORA-01840:输入值不足以在尝试访问页面时出现日期格式错误。我还没有发现是什么导致了这个错误。有人有线索吗?

更新2

现在我很困惑。原来我的页面变量不需要to_char等,所以我删除了这些变量(to_char等)。现在我通常被发送到正确的页面,但我在上一页“设置这些项/使用这些值”文本字段中输入的最后一个值不是send。以下是我现在在这些文本字段中的内容:

在这个图像中,P85_BEGINTIJD不是发送的。我也改变了价值观,但这并没有什么区别。您可以通过请求或其他东西发送的值的数量是否有限制?

EN

Stack Overflow用户

回答已采纳

发布于 2015-10-19 11:36:24

好吧,最后,我解决了。在我的上一次更新中,唯一持久的问题是一些变量没有发送到下一页。我找不到问题的根本原因,所以我做了一个解决办法。

通常发送到下一页的唯一变量是P91_UITZENDING (Uitzending的PK )。幸运的是,我需要的其他变量( eindtijd、eindtijd和datum)是Uitzending的属性,因此我能够在相应页面项的源代码中使用如下语句派生它们:

代码语言:javascript
复制
SELECT to_char(begintijd,'HH24:MI')
-- replace with eindtijd for eindtijd, and for date: to_char(datum,'DD-MON-YYYY')
FROM Uitzending
WHERE id = :P91_UITZENDING

以及选中框的最后SQL查询:

代码语言:javascript
复制
SELECT voornaam || ' ' || achternaam AS display_value, id AS return_value
FROM Gebruiker
WHERE -- Other statements
AND id IN (SELECT gebruikerid 
           FROM Beschikbaarheid
           WHERE (dag = to_char(to_date(:P91_DATUM,'DD-MON-YYYY'),'fmDay','NLS_DATE_LANGUAGE=Dutch'))
           AND (
                to_date('01-01-2000' || :P91_BEGINTIJD,'DD-MM-YYYY HH24:MI') 
                BETWEEN
                to_date('01-01-2000' || to_char(begintijd,'HH24:MI'),'DD-MM-YYYY HH24:MI')
                AND
                to_date('01-01-2000' || to_char(eindtijd,'HH24:MI'),'DD-MM-YYYY HH24:MI')
               )
           AND (
                to_date('01-01-2000' || :P91_EINDTIJD,'DD-MM-YYYY HH24:MI') 
                BETWEEN 
                to_date('01-01-2000' || to_char(begintijd,'HH24:MI'),'DD-MM-YYYY HH24:MI')
                AND
                to_date('01-01-2000' || to_char(eindtijd,'HH24:MI'),'DD-MM-YYYY HH24:MI')
               )
          );

我仍然不知道为什么eindtijd、eindtijd和datum没有以正常的方式发送,但至少它现在起作用了。

谢谢大家的思考和帮助!

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33158091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档