Oracle时间比较 (送分)解决思路
Oracle时间比较 (送分)
Orale 查询语句就像我上面写的一样 两张表的 name是相同的,不加最后一个 "and"语句能查到值,把所有的数据都查出来了。
但是加上最后一句查不到直,请教下应该如何改,才能保证有结果啊?
to_char(a.date,'yyyy-mm-dd')='2010-11-15' 这句必不可少
------解决方案--------------------
你先要确保一下,你 a 表中,有没有 2010-11-15 的数据?
------解决方案--------------------
b 表呢,b 表有没有 2010-11-15 以后的数据,你这个是关联查询,需要几个条件都满足才行的,还有 a.name = b.name 且时间还要满足要求
------解决方案--------------------
从SQL本身看,你的SQL是没有问题的,查不出来数据的原因应当是数据库中没有满足条件的数据。
你这个SQL查不出来数据最大的可能是,你使用
- SQL code
select a.name from A a,B b where a.name=b.name and to_char(a.date,'yyyymmdd') <= to_char(b.end_date,'yyyymmdd') and to_char(a.date,'yyyy-mm-dd')='2010-11-15'
Orale 查询语句就像我上面写的一样 两张表的 name是相同的,不加最后一个 "and"语句能查到值,把所有的数据都查出来了。
但是加上最后一句查不到直,请教下应该如何改,才能保证有结果啊?
to_char(a.date,'yyyy-mm-dd')='2010-11-15' 这句必不可少
------解决方案--------------------
你先要确保一下,你 a 表中,有没有 2010-11-15 的数据?
------解决方案--------------------
b 表呢,b 表有没有 2010-11-15 以后的数据,你这个是关联查询,需要几个条件都满足才行的,还有 a.name = b.name 且时间还要满足要求
------解决方案--------------------
从SQL本身看,你的SQL是没有问题的,查不出来数据的原因应当是数据库中没有满足条件的数据。
你这个SQL查不出来数据最大的可能是,你使用
- SQL code
select a.name from A a,B b where a.name=b.name and to_char(a.date,'yyyy-mm-dd')='2010-11-15'
------解决方案--------------------
你的语句相当于
select a.name from A a,B b where a.name=b.name
and to_char(b.end_date,'yyyy-mm-dd') = > '2010-11-15'
你看看这个有数据不,
------解决方案--------------------
------解决方案--------------------
注意提问智慧
把表的测试数据贴出来吧
1、表结构
2、测试数据
3、需求描述
4、期待得到的结果数据
5、其他疑问
------解决方案--------------------
- SQL code
--坑爹阿,咋不行了? with tab1 as ( select 'a' name, sysdate A_date from dual union all select 'b', sysdate + 1 from dual union all select 'c', sysdate + 2 from dual ), tab2 as ( select 'a' name, sysdate B_date from dual union all select 'b' , sysdate + 1 from dual union all select 'c', sysdate from dual ) --只用name关联,查询结果 select * from tab1, tab2 where tab1.name = tab2.name ------------------ a ********* b ********* c 省略行不行,还用写这些吗? --用name和日期两个条件查询结果 select * from tab1, tab2 where tab1.name = tab2.name and to_char(tab1.A_date, 'yyyymmdd') = to_char(tab2.B_date, 'yyyymmdd') --------------------- a ****** b 这个也省略行不行??阿?行不行 --用三个条件查询 select * from tab1, tab2 where tab1.name = tab2.name and to_char(tab1.A_date, 'yyyymmdd') = to_char(tab2.B_date, 'yyyymmdd') and to_char(tab1.A_date, 'yyyy-mm-dd') = '2011-09-20' -------------------- b *******(还是省略有木有) --ps:我擦,累死鸟!!全部都是一个一个字母敲上去的,真JB累阿!!!! --楼主哥们,你再好好看看你的表吧!
------解决方案--------------------
------解决方案--------------------
and 前后的条件应该对调!
------解决方案--------------------
- SQL code
select a.name from A as a inner join B as b on b.name = a.name and b.end_date >= a.date where to_char(a.date,'yyyy-mm-dd')= '2010-11-15'