RE: I was told there would be no (date) math

  • To: <oracle-l@xxxxxxxxxxxxx>
  • Date: Thu, 13 Apr 2006 12:22:43 -0500

Hmmm:

SELECT DUMP(SYSDATE - SYSDATE) FROM dual;

DUMP(SYSDATE-SYSDATE)

-----------------------------------------
Typ=14 Len=8: 0,0,0,0,0,0,0,0

But according to the Oracle9i SQL Reference Release 2 (9.2) Part Number
A96540-02, section titled "Datatypes", there is no type "14".

Similarly, when subtracting a number from a date:

SELECT DUMP(SYSDATE - 1) FROM dual;

DUMP(SYSDATE-1)

-----------------------------------------
Typ=13 Len=8: 7,214,4,12,12,16,3,0

And there is no type "13" listed, either.  One could ASSuME that 13 and
14 are dates, given that type 12 is, and Metalink article 69028.1
mentions "External datatype 13 is an internal c-structure whose length
varies depending on how the c-compiler represents the structure.", but
that's all I could find.

Thanks all for the clarification on this.  There seemed to be some
undocumented features at work here that was making me curious.

Rich

-----Original Message-----
From: Ken Naim [mailto:kennaim@xxxxxxxxx] 
Sent: Thursday, April 13, 2006 12:03 PM
To: Jesse, Rich; oracle-l@xxxxxxxxxxxxx
Subject: RE: I was told there would be no (date) math


When you subtract two dates you get a number and sql follows order of
operations so it goes from left to right.

Trunc(sysdate)- Trunc(sysdate) - Trunc(sysdate) becomes
1- trunc(sysdate) which throws the error as you cannot subtract a date
from
a number

With the parenthesis the way you have it you start with 
TRUNC(SYSDATE) - (TRUNC(SYSDATE) - TRUNC(SYSDATE)) which becomes
TRUNC(SYSDATE) - 1 which is fine.

If you would switch the parenthesis to 
(TRUNC(SYSDATE) - TRUNC(SYSDATE)) - TRUNC(SYSDATE) you would get the
same
error as it would become 1- trunc(sysdate) 

Ken Naim




-----Original Message-----
From: oracle-l-bounce@xxxxxxxxxxxxx
[mailto:oracle-l-bounce@xxxxxxxxxxxxx]
On Behalf Of Jesse, Rich
Sent: Thursday, April 13, 2006 8:52 AM
To: oracle-l@xxxxxxxxxxxxx
Subject: I was told there would be no (date) math

Hey all,

While debugging an analytical function issue using 9.2.0.5, I run this
idiotic query:

SELECT TRUNC(SYSDATE) - TRUNC(SYSDATE) - TRUNC(SYSDATE)
FROM DUAL;

And it errors out with:

ORA-00932: inconsistent datatypes: expected DATE got DATE

(In 10.2, the verbage is modified to "expected JULIAN DATE got DATE")

Add parenthesis and it works:

SELECT TRUNC(SYSDATE) - (TRUNC(SYSDATE) - TRUNC(SYSDATE))
FROM DUAL;

I've been looking through the docs and Metalink, but I'm unable to
answer "Why?".  Anyone?

TIA!
Rich
--
//www.freelists.org/webpage/oracle-l
--
//www.freelists.org/webpage/oracle-l


Other related posts: