Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7310463
  • 博文数量: 444
  • 博客积分: 10593
  • 博客等级: 上将
  • 技术积分: 3852
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-09 15:26
文章分类

全部博文(444)

文章存档

2014年(1)

2013年(10)

2012年(18)

2011年(35)

2010年(125)

2009年(108)

2008年(52)

2007年(72)

2006年(23)

分类: Oracle

2012-07-17 15:02:41

数据库版本 oracle 10.2.0.1
第一条sql
drop table v_11;
create table v_11 as
select sum(b.amount*rate/100) amount
                     from pay_due_t b,document_t a,v_t c
              where   a.serial_number=b.serial_number
              and b.currency_code=c.currency_code
              and c.year=(to_char(deal_date,'yyyy'))
              and c.month=to_number(to_char(deal_date,'mm'))
 and deal_date  between trunc(to_date('07-09-2012','mm-dd-yyyy'),'yyyy') and to_date('07-09-2012 23:59:59','mm-dd-yyyy hh24:mi:ss')
                            ;
              select sum(amount) from v_11;
第二条
select sum(b.amount*rate/100) amount
                     from pay_due_t b,document_t a,v_t c
              where   a.serial_number=b.serial_number
              and b.currency_code=c.currency_code
              and year=(to_char(deal_date,'yyyy'))
              and month=to_number(to_char(deal_date,'mm'))
 and deal_date  between trunc(to_date('07-09-2012','mm-dd-yyyy'),'yyyy') and to_date('07-09-2012 23:59:59','mm-dd-yyyy hh24:mi:ss');
 
其中 v_t.year v_t.month 都是varchar2类型
两者看起来运行结果是一样的,实际却不一样的
但因为数据类型的不同 to_number的使用导致了错误结果
and c.month=to_number(to_char(deal_date,'mm'))
修改成               
and c.month=to_char(to_number(to_char(deal_date,'mm')))
结果就一致了
阅读(918) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~