Jared,

Of course, I have been corrected!  

Woo-hoo!  I win!  I learned something new today!  I get to go home early!

Wow.  This was really a shocker to me. I tried a little test myself on an
817 database and it works as Raj (and the documentation) said it would.

Does this mean I will change my coding-ways and depend on it to work in the
future?  Of course not!  I like explicitly coding things so that I'm not
surprised!  Old Dog.

Tom Mercadante
Oracle Certified Professional


-----Original Message-----
Sent: Tuesday, October 29, 2002 12:54 PM
To: [EMAIL PROTECTED]
Cc: [EMAIL PROTECTED]
Importance: High


Tom,

If the string matches the NLS_DATE_FORMAT, Oracle will convert it to  a 
date.

Try this:

create table d( d date );

alter session set nls_date_format = 'dd-mon-yy';

insert into d values('21-dec-02');
insert into d values('22-dec-02');
insert into d values('23-dec-02');
insert into d values('24-dec-02');

commit;

select *
from d
where d.d between '22-dec-02' and '23-dec-02'
/

Jared





"Mercadante, Thomas F" <[EMAIL PROTECTED]>
Sent by: [EMAIL PROTECTED]
 10/29/2002 07:54 AM
 Please respond to ORACLE-L

 
        To:     Multiple recipients of list ORACLE-L <[EMAIL PROTECTED]>
        cc: 
        Subject:        RE: Implicit Date conversion problem


Raj,
 
you said:
 
"according to Oracle, when comparing a varchar2 to a date column, the 
string does get converted to a date ...  "
 
This has got to be wrong.  If you compare a varchar2 column with a number, 
Oracle try's to convert the varchar2 to a number, and we end up with an 
"invalid number" error.  Oracle has not choice but to attempt to convert a 
database column to a literal - it can *never* go in the other direction 
because it cannot make the correct assumption.  At least I would not try 
and provide that service.
 
I would explain to the developers and the managers that this is the way it 
works.  And it will always work correctly if they do explicit date 
conversion in their Sql.  Once they begin coding this correctly, they will 
always be happy - it will always work consistently. 
 
The manuals have been known to be wrong in the past, and if you and they 
have found the above quote in a manual, it is wrong.  At least I have 
*never* seen Oracle act like this.
 
Hope this helps.
 
Tom Mercadante 
Oracle Certified Professional 
-----Original Message-----
Sent: Tuesday, October 29, 2002 10:42 AM
To: 'Mercadante, Thomas F'; '[EMAIL PROTECTED]'

Well, 
Let me point out one thing .... following is the original query ... 
-- this returns no rows ... 
select ea1.ep_number, ea1.est_dt, veas.est_dt 
  from (select a.ep_number, ea.est_dt 
          from v_episode_avail_summary_break a, episode_airings ea 
         where a.ep_number = ea.ep_number 
           and ea.est_dt between '20-Dec-02' and '01-Jan-03' 
         group by a.ep_number, ea.est_dt) veas, 
       episode_airings ea1 
where veas.ep_number = ea1.ep_number 
  and ea1.est_dt between '20-Dec-02' and '01-Jan-03' 
-- This DOES work ... returns all the right rows 
select ea1.ep_number, ea1.est_dt, veas.est_dt 
  from (select a.ep_number, ea.est_dt 
          from v_episode_avail_summary_break a, episode_airings ea 
         where a.ep_number = ea.ep_number 
           and ea.est_dt between '20-Dec-02' and '01-Jan-03' 
         group by a.ep_number, ea.est_dt) veas, 
       episode_airings ea1 
where veas.ep_number = ea1.ep_number 
--  and ea1.est_dt between '20-Dec-02' and '01-Jan-03' 
Point to consider is that the "commented out where clause" is the same as 
the one used in the from clause query ... then why does it fail?
Tom: according to Oracle, when comparing a varchar2 to a date column, the 
string does get converted to a date ... 
The reason i am asking this I have to explain the developers on why this 
isn't working. They agree that explicit datatype conversion is a good idea 
but their managers want to know why ??
(yeah ... sure go ahead pity me ...) 
Raj 
______________________________________________________ 
Rajendra Jamadagni              MIS, ESPN Inc. 
Rajendra dot Jamadagni at ESPN dot com 
Any opinion expressed here is personal and doesn't reflect that of ESPN 
Inc. 
QOTD: Any clod can have facts, but having an opinion is an art! 
-----Original Message----- 
Sent: Tuesday, October 29, 2002 10:35 AM 
To: '[EMAIL PROTECTED]' 
Cc: Jamadagni, Rajendra 

Raj, 
you are forgetting how dates are stored internally vs. how they are 
displayed by sqlplus. 
change your first query to: 
select ea1.ep_number, ea1.est_dt, veas.est_dt 
  from (select a.ep_number, ea.est_dt 
          from v_episode_avail_summary_break a, episode_airings ea 
         where a.ep_number = ea.ep_number 
           and ea.est_dt between to_date('20-Dec-2002','dd-mon-yyyy') and 
to_date('01-Jan-2003' ,'dd-mon-yyyy') 
         group by a.ep_number, ea.est_dt) veas, 
       episode_airings ea1 
where veas.ep_number = ea1.ep_number 
  and ea1.est_dt between between to_date('20-Dec-2002','dd-mon-yyyy') and 
to_date('01-Jan-2003' ,'dd-mon-yyyy') 
Your selection was not working properly because you ended up comparing 
string values with string values. 
example:  21-Dec-2002 is not between 20-Dec-2002 and 01-Jan-2003 using 
string comparison 
                    (21 is greater than 20 and 01 both). 
hope this helps. 
Tom Mercadante 
Oracle Certified Professional 

-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: Mercadante, Thomas F
  INET: [EMAIL PROTECTED]

Fat City Network Services    -- 858-538-5051 http://www.fatcity.com
San Diego, California        -- Mailing list and web hosting services
---------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from).  You may
also send the HELP command for other information (like subscribing).

Reply via email to