比较日期列时oracle sql查询错误

时间:2010-12-14 06:07:31

标签: sql oracle

我有一个以下的oracle sql查询,其中START_DATE是一个数字列,a_date是DATE类型,输入值也是DATE类型。请告诉我如何将日期列与输入日期进行比较。

select a.id ,a.v ,b.id,b.v  
 from DATA a ,FDC  b  where a.START_DATE = to_date('11-DEC-10','YYYYMMDD')
 and a.START_DATE = b.a_date and b.code = 'JFK'

4 个答案:

答案 0 :(得分:2)

select a.id ,a.v ,b.id,b.v  
 from DATA a ,FDC  b  where a.START_DATE LIKE TO_DATE('11-DEC-10','DD-MON-YY')
 and a.START_DATE = b.a_date and b.code = 'JFK'

如果您将START_DATE存储为'YYYYMMDD'之类的数字:

a.START_DATE=TO_NUMBER(TO_DATE('20101211','YYYYMMDD'))

答案 1 :(得分:0)

这完全取决于您的号码start_date列的存储格式。

但是,如果在真实日期列上使用谓词,并且仅使用格式掩码加入一次,则可能会更容易。

例如:

SELECT a.id,
       a.v, 
       b.id,
       b.v  
  FROM data a, 
       fdc b
 WHERE b.a_date = to_date('11-DEC-2010','DD-MON-RRRR')
   AND a.start_date = TO_NUMBER(TO_CHAR(b.a_date, 'DDMMRRRR'))
   AND b.code = 'JFK'

请注意,日期格式与您要比较的日期格式相匹配 - b.a_date = to_date('11-DEC-2010','DD-MON-RRRR')。此查询假定a.start_date列以DDMMRRRR格式存储。您需要根据日期存储的格式对其进行修改,例如: a.start_date = TO_NUMBER(TO_CHAR(b.a_date, 'J'))表示朱利安日期。

P.S。为什么要使用数字来存储日期?

答案 2 :(得分:-1)

从tbltlcrconfighistory中选择*,其中TO_DATE(STARTDATE,'dd-mon-yyyy')= TO_DATE('14 -dec-2010','dd-mon-yyyy');

答案 3 :(得分:-1)

从tbltlcrconfighistory中选择*,其中STARTDATE = TO_DATE('14 -dec-2010','dd-mon-yyyy');