oracle 如何查询一个月的数据

大明湖畔_帅锅 2011-07-28 02:37:39
表 tb1
时间字段: a_date(格式:年月日)
输入的年月: s_date(格式:年月)


下面俩方法貌似都不行、需要怎么改或者有其他方法也行

SELECT * FROM tb1 t
WHERE to_char( t.a_date,'yyyymm') = to_char(s_date,'yyyymm')

select * from tb1 t
where DATEPART(yy,t.a_date) = DATEPART(yy,s_date)
and DATEPART(mm,t.a_date) = DATEPART(mm,s_date)

...全文
2515 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
嗯 学习了 偶上周才开始接触oracle 还没考虑这些呢 结贴咯
siakang 2011-07-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 hj_daxian 的回复:]
表 tb1
时间字段: a_date(格式:年月日)
输入的年月: s_date(格式:年月)


下面俩方法貌似都不行、需要怎么改或者有其他方法也行


SQL code

SELECT * FROM tb1 t
WHERE to_char( t.a_date,'yyyymm') = to_char(s_date,'yyyymm')

select * from t……
[/Quote]


SELECT * FROM tb1 t
WHERE to_char( t.a_date,'yyyymm') = to_char(s_date,'yyyymm')

这种方式是可以的
比如 表a里的字段create_time是date

select *
from tab1 a
where to_char(a.create_time, 'yyyymm') = to_char(to_date('201106','yyyymm'),'yyyymm')
luoyoumou 2011-07-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hj_daxian 的回复:]

嗯 多谢了 根据你的意思 我想了一种方法


SQL code
SELECT * FROM tb1 t where
to_date( t.a_date,'yyyy-mm-dd') >= to_date('2011-07', 'yyyy-mm') and
to_date( t.a_date,'yyyy-mm-dd') < add_months(to_date('2011-07……
[/Quote]

你为什么表的日期字段要用字符串类型呢,而不直接用日期类型呢?


-- 请看:
http://topic.csdn.net/u/20110323/13/43a9766c-9a40-470d-8adb-9c2594282203.html
luoyoumou 2011-07-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hj_daxian 的回复:]

嗯 多谢了 根据你的意思 我想了一种方法


SQL code
SELECT * FROM tb1 t where
to_date( t.a_date,'yyyy-mm-dd') >= to_date('2011-07', 'yyyy-mm') and
to_date( t.a_date,'yyyy-mm-dd') < add_months(to_date('2011-07……
[/Quote]

-- 呵呵,还算聪明!
  • 打赏
  • 举报
回复
嗯 多谢了 根据你的意思 我想了一种方法


 SELECT * FROM tb1 t where 
to_date( t.a_date,'yyyy-mm-dd') >= to_date('2011-07', 'yyyy-mm') and
to_date( t.a_date,'yyyy-mm-dd') < add_months(to_date('2011-07', 'yyyy-mm'),1)
luoyoumou 2011-07-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 luoyoumou 的回复:]

SQL code
-- 输入参数只要年月就可以啦,日默认为当月的第一天,例如:

SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

会话已更改。

SQL> select to_date('2011-06','yyyy-mm') from dual;

TO_DATE('2011-06','
-----------……
[/Quote]

-- 当然你也可以将日加上撒,无非就是加个当月的第一天嘛!

-- 这样的问题再继续问下去就没什么意思啦!
luoyoumou 2011-07-28
  • 打赏
  • 举报
回复
-- 输入参数只要年月就可以啦,日默认为当月的第一天,例如:

SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

会话已更改。

SQL> select to_date('2011-06','yyyy-mm') from dual;

TO_DATE('2011-06','
-------------------
2011-06-01 00:00:00
  • 打赏
  • 举报
回复
sql倒是会 刚开始学oracle呢、 一些时间函数还不是很清楚、
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 luoyoumou 的回复:]

SQL code
-- 比如说:要查询2011年6月份的数据,你可以执行以下语句:
SELECT * FROM tb1 t
WHERE t.a_date >= to_date('2011-06-01','YYYY-MM-DD')
AND t.a_date < to_date('2011-07-01','YYYY-MM-DD')
[/Quote]

关键是输入的是年月格式的 查询的时候还要手动添加日么?
luoyoumou 2011-07-28
  • 打赏
  • 举报
回复
-- 比如说:要查询2011年6月份的数据,你可以执行以下语句:
SELECT * FROM tb1 t
WHERE t.a_date >= to_date('2011-06-01','YYYY-MM-DD')
AND t.a_date < to_date('2011-07-01','YYYY-MM-DD')

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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