首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PL/SQL检查SYSDATE是否介于两个DATETIMES“mi 24:mi”之间

PL/SQL检查SYSDATE是否介于两个DATETIMES“mi 24:mi”之间
EN

Stack Overflow用户
提问于 2015-06-09 19:04:33
回答 3查看 2.7K关注 0票数 0

我正在尝试建立一个函数来检查我的sysdate是否在HH24 24:mi上的两个数据之间。如果这是真,那么如果它不返回0,则需要返回1。

我试过这个,但没有成功:Check if current date is between two dates Oracle SQL

下面是我使用的代码:

代码语言:javascript
复制
create or replace FUNCTION WinkelOpen(winkelID Number)
  RETURN NUMBER
IS
  CURSOR c_tijden_t(v_temp_winkelID IN NUMBER, v_temp_dag IN VARCHAR2) IS
        SELECT * FROM Openingstijd
        WHERE winkel_id = v_temp_winkelID
        AND dag = v_temp_dag;

  TYPE a_array_days IS VARRAY(7) OF VARCHAR2(2);
    v_dagen a_array_days := a_array_days('ma', 'di', 'wo', 'do', 'vr', 'za', 'zo');    

  v_temp_suc  NUMBER;
  v_isClosed Number(1,0) := 0;


BEGIN
  FOR i IN c_tijden_t(winkelID, v_dagen(to_char (SYSDATE, 'D')-1)) LOOP

    select * INTO v_temp_suc from dual 
    WHERE trunc(sysdate) 
    BETWEEN TO_DATE(i.open, 'HH24:mi') 
    AND TO_DATE(i.gesloten, 'HH24:mi');

    --if v_temp_suc is 0 then keep looping
    --else v_isClosed = 1 break loop

    END LOOP;
    RETURN v_isClosed;
END WinkelOpen;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-10 09:14:59

在日期上使用TRUNC将其设置为当天的00:00。我想你现在想要的是“检查一下,现在,是不是在X和Y之间”。就像米克说的,以下应该是好的:

代码语言:javascript
复制
SELECT count(*) INTO v_temp_suc FROM dual 
WHERE to_char(sysdate, 'HH24:MI') 
BETWEEN i.open AND i.gesloten;

但是,您还需要注意,您可能正在游标中遍历多个结果。您可能会得到任意数量的点击,但它只会返回的最后一个结果。您已经注释掉了光标中的伪代码部分。但你别忘了

代码语言:javascript
复制
IF v_temp_suc != 0 THEN
  EXIT;
END IF;

另外,根据您使用的输入类型(如用户输入),您可能会发现它们有时会先输入较晚的时间,有时则会输入较早的时间。所以如果你正经历着奇怪的结果

意思:如果(2在1和3之间)给出真,如果(2在3和1之间)给出假。

票数 1
EN

Stack Overflow用户

发布于 2015-06-09 20:32:14

假设i.openi.gesloten中的数据为HH24:MI格式(以及10为零填充数小时),您可以在您的过程中使用此查询:

代码语言:javascript
复制
SELECT count(*) INTO v_temp_suc FROM dual 
WHERE to_char(sysdate, 'HH24:MI') 
BETWEEN i.open AND i.gesloten;

查询将返回01,这取决于当前时间(数据库的时间)是否在间隔内。

票数 2
EN

Stack Overflow用户

发布于 2015-06-09 20:02:38

根据下面的评论你的帖子,你说你只感兴趣的时间部分时,比较。因此,在这种情况下,您也许可以这样做:

代码语言:javascript
复制
select * INTO v_temp_suc from dual 
WHERE sysdate
BETWEEN TO_DATE(to_char(sysdate, 'YYYY-MM-DD ') || i.open, 'YYYY-MM-DD HH24:MI') 
AND TO_DATE(to_char(sysdate, 'YYYY-MM-DD ') || i.gesloten, 'YYYY-MM-DD HH24:MI');

这假设i.openi.geslotenvarchars,并且它们实际上被格式化为HH24:MI

我相信有更好的方法来做这件事,但这至少是可行的。

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

https://stackoverflow.com/questions/30740671

复制
相关文章

相似问题

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