一个很难的sql语句大求助

bangyulin 2010-03-06 01:41:54
oracle数据库,想使用sql语句,根据时间段如2002-01-02 2006-10-11查询出四条记录2002;2003;2004;2005; 求助这条sql
...全文
343 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
李晚晚 2010-03-22
  • 打赏
  • 举报
回复
汗死 LZ怎么问个问题都描述不清楚呢
nimittz 2010-03-22
  • 打赏
  • 举报
回复
很明显楼主没搞清要问什么?
shiyiwan 2010-03-22
  • 打赏
  • 举报
回复
select to_char(to_date('2002-01-02','yyyy-mm-dd'),'yyyy') + rownum - 1
from dual
connect by rownum <= to_char(to_date('2006-10-11','yyyy-mm-dd'),'yyyy') - to_char(to_date('2002-01-02','yyyy-mm-dd'),'yyyy');
zoeg 2010-03-08
  • 打赏
  • 举报
回复
看来似乎大家都没有理解楼主的意思,楼主的要求是不基于任何现有表记录,凭空得到一个表示两个日期间年份的数值集.我之前也遇到过类似的需求,不过我手上没有oracle环境,以下是DB2的实现,楼主可以参考下:
with Test(y) as(
values(year(date('2005-01-02')))
union all select y+1 as y from Test
where y+1<year(date('2009-01-02'))
)
select * from Test order by y
主要是依赖数据库SQL的递归
  • 打赏
  • 举报
回复
改成这样的话,看上去简单一些:

SQL> WITH x AS (
2 SELECT extract(YEAR FROM to_date('2002-01-02', 'yyyy-mm-dd')) a,
3 extract(YEAR FROM to_date('2006-10-11', 'yyyy-mm-dd')) b
4 FROM dual
5 )
6 SELECT least(x.a, x.b) + ROWNUM -1 AS YEAR
7 FROM x
8 CONNECT BY LEVEL <= abs(x.a - x.b) + 1;

YEAR
----------
2002
2003
2004
2005
2006

SQL>
  • 打赏
  • 举报
回复
SQL>  SELECT extract(YEAR FROM to_date('2002-01-02', 'yyyy-mm-dd')) + ROWNUM - 1 AS YEAR
2 FROM dual
3 CONNECT BY level <=
4 abs(extract(YEAR FROM to_date('2002-01-02', 'yyyy-mm-dd')) -
5 extract(YEAR FROM to_date('2006-10-11', 'yyyy-mm-dd'))) + 1;

YEAR
----------
2002
2003
2004
2005
2006

SQL>
ty86 2010-03-07
  • 打赏
  • 举报
回复
LZ是不是要按照每隔多少时间段统计数据,比如1941 1942 1943 数据分别是多少,有两种思路,一种存储过程里面用游标统计,这种方法很简单,就是判断下时间,还有种方法就是可以创建一个临时表,表里面存储你的时间段数据比如19410101 19410102 这个是每隔一天统计的,然后将数据表里面的时间用oracle函数substr()来关联进行统计。
目前只想到上面的方法,用一句SQL分段统计的方法还没想出来,谁想出来了可以告知下,如果LZ不是这个需求的话可以直接group by 日期,这个是既有的数据表上统计的,查看表中已有时间的统计方法
py330316117 2010-03-07
  • 打赏
  • 举报
回复
引用 8 楼 bangyulin 的回复:
顶上去,大家还是理解错了,数据库没有表的,可是是类似于利用from daul加时间段, 计算出几条记录


没有表你怎么存储数据,更别说查数据了
zxj828282 2010-03-07
  • 打赏
  • 举报
回复
topt op top
哈特中尉 2010-03-06
  • 打赏
  • 举报
回复
楼主要在帮助里面查一下日期的几个函数!里面会有很多的,方法也有很多,实在太多了,还是要lz自己看的!
bangyulin 2010-03-06
  • 打赏
  • 举报
回复
顶上去,大家还是理解错了,数据库没有表的,可是是类似于利用from daul加时间段, 计算出几条记录
py330316117 2010-03-06
  • 打赏
  • 举报
回复
引用 4 楼 nihaozhangchao 的回复:
SQL code
SQL>select*from gjhohj_a;

ID D--------------------------------------- -----------12010-2-112011-2-112012-2-112013-2-112014-2-1

SQL>select*from gjhohj_awhere to_char(d,'yyyy')>='2011'and to_char(d,'yyyy')<='2013';

ID D--------------------------------------- -----------12011-2-112012-2-112013-2-1

SQL>


写的很详细了,把*转换成你要查的信息,如name,age等就可以了
jypapgl 2010-03-06
  • 打赏
  • 举报
回复
lz
查询出的结果为啥没有2006
买哦书问题不负责任
goosman 2010-03-06
  • 打赏
  • 举报
回复
不会, 不明白题意.
SambaGao 2010-03-06
  • 打赏
  • 举报
回复

SQL> select * from gjhohj_a;

ID D
--------------------------------------- -----------
1 2010-2-1
1 2011-2-1
1 2012-2-1
1 2013-2-1
1 2014-2-1

SQL> select * from gjhohj_a where to_char(d,'yyyy')>='2011' and to_char(d,'yyyy')<='2013';

ID D
--------------------------------------- -----------
1 2011-2-1
1 2012-2-1
1 2013-2-1

SQL>
bangyulin 2010-03-06
  • 打赏
  • 举报
回复
引用 1 楼 chen09 的回复:
果然很难很那

select * from table1 where to_number(to_char(date_field,'YYYY'),'9999') <=2005 and xxxxxxxx>=2002
你理解错了,要的效果是通过时间段查询出虚拟表(数据库不存在这表),时间段相隔几年查几条记录
bangyulin 2010-03-06
  • 打赏
  • 举报
回复
引用 1 楼 chen09 的回复:
果然很难很那

select * from table1 where to_number(to_char(date_field,'YYYY'),'9999') <=2005 and xxxxxxxx>=2002
你这行吗,这些数据并不在吗表中的,根据条件统计出来的
yinongstudio 2010-03-06
  • 打赏
  • 举报
回复
你搜一下oracle when case
然后结合to_char之类的,应该可以搞定吧
chen09 2010-03-06
  • 打赏
  • 举报
回复
果然很难很那

select * from table1 where to_number(to_char(date_field,'YYYY'),'9999')<=2005 and xxxxxxxx>=2002
li569575121 2010-03-06
  • 打赏
  • 举报
回复
楼上问的问题估计自己还是没搞清楚你想查什么。
如果你是想练习日期函数中能算出时间段的,那就用:select month_between("date1","date2") from dual;其中dual是一个表,在这里选择这个表是因为他只有一条数据,执行select语句时,就只执行一次,否则它会输出结果的次数会和表中记录条数相同的,很多,
如果你想查找某个时间段记录了哪些表,可以先找系统日志,找出存储字段,进行查找。把上面的表名换一下,再加上字段。
如果你想从一个不存在的表里查找你自己在其他地方看到的某些时间段的记录,那不行的。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧