【发布时间】:2015-08-24 18:43:50
【问题描述】:
我正在尝试创建一个函数来检查我的 sysdate 是否介于 HH24:mi 上的两个数据之间。如果这是真的,那么如果它不返回 0,它需要返回 1。
我试过这个但没有成功:Check if current date is between two dates Oracle SQL
这是我使用的代码:
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;
【问题讨论】:
-
但是您将苹果与橙子进行比较。 sysdate 有日期+时间信息。您要检查的 2 个日期只有时间信息。当然,这是行不通的。编辑:实际上,更糟糕的是:您正在从 sysdate.xml 中删除时间信息。因此,您实际上是将日期与 2 次进行比较。这没有意义!!!
-
is between 2 datas on the HH24:mi是什么意思?可以举个例子吗? -
例如我的 Sysdate 是:18:00,两次是 17:00 和 19:00。我的 sysdate 现在介于两个日期之间。
-
@Kevin:不。您的系统日期将类似于“6 月 9 日 18:00”。而且因为您正在对其进行
TRUNC,所以它只会是“6 月 9 日@午夜”。您的 2 个日期,因为它们没有任何日期部分,当转换为日期时,将默认为“6 月 1 日 17:00”和“6 月 1 日 19:00”。他们根本不在同一个球场。苹果和橙子。 -
@sstan 如果我删除“TRUNC”,它仍然是苹果和橙子。