我试图在Oracle 11g中找到两个日期之间的整数天数.
我可以靠近做
select sysdate - to_date('2009-10-01', 'yyyy-mm-dd') from dual
Run Code Online (Sandbox Code Playgroud)
但这会返回一个间隔,而我还没有成功将其转换为整数.
编辑:显然在10g中,这将以整数形式返回天数.
我需要使用Oracle,但DATEDIFF函数在Oracle DB中不起作用.
如何在Oracle中编写以下代码?我看到了一些使用INTERVAL或TRUNC的例子.
SELECT DATEDIFF ('2000-01-01','2000-01-02') AS DateDiff;
Run Code Online (Sandbox Code Playgroud) 我对Oracle DATE和INTERVAL数据类型的一些内部工作方式有疑问.根据Oracle 11.2 SQL Reference,当您减去2个DATE数据类型时,结果将是NUMBER数据类型.
粗略测试,这似乎是真的:
CREATE TABLE test (start_date DATE);
INSERT INTO test (start_date) VALUES (date'2004-08-08');
SELECT (SYSDATE - start_date) from test;
Run Code Online (Sandbox Code Playgroud)
将返回NUMBER数据类型.
但现在如果你这样做:
SELECT (SYSDATE - start_date) DAY(5) TO SECOND from test;
Run Code Online (Sandbox Code Playgroud)
你得到一个INTERVAL数据类型.换句话说,Oracle可以将NUMBER从DATE减法转换为INTERVAL类型.
所以现在我想我可以尝试直接在括号中输入NUMBER数据类型(而不是做'SYSDATE - start_date',这会导致NUMBER反正):
SELECT (1242.12423) DAY(5) TO SECOND from test;
Run Code Online (Sandbox Code Playgroud)
但这会导致错误:
ORA-30083: syntax error was found in interval value expression
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:这里发生了什么?似乎减去日期应该导致NUMBER(如SELECT语句#1中所示),它不能自动转换为INTERVAL类型(如SELECT语句#3中所示).但是,如果使用DATE减法表达式而不是放入原始NUMBER(SELECT语句#2),Oracle似乎能够以某种方式做到这一点.
谢谢
我想要获得2个用户之间的时差,我需要几小时的差异.
我试图使用DATEDIFF函数,但这是错误的.
这是我的代码:
SELECT DATEDIFF(*,
(SELECT max(u1.time_c)
FROM users u)
,
(SELECT max(u2.time_c)
FROM users u2)
Run Code Online (Sandbox Code Playgroud) 我有一张表,其中维护了PurchasedDate.我必须从系统中获取日期并计算日期差异.由于我在Oracle工作,datediff()没有给出结果.
样品表:
ProductID Date P101 31-DEC-2012 P102 29-DEC-2011
如果今天返回P102,差异应为10.
这是一个详细的描述
BillID ProductID Date 101 P101 31-DEC-2012 101 P102 31-DEC-2012 102 P405 29-JUN-2012 102 P210 29-JUN-2012 105 P205 2-MAY-2012
如果客户使用BillNo 101重新调用产品P101,则系统应计算返回日期(系统日期)与购买日期之间的差异.如果P101在2012年1月8日返回,则答案应为10