oracle 依据日期查询,Oracle中不同条件的日期查询

Oracle SQL查询,日期过滤条件要注意的一点

应当用:

where TO_CHAR(t.RecordTime, 'yyyymmdd') = '20100519'

不能用:

where t.RecordTime = TO_DATE('200100519', 'yyyymmdd')

to_char是把日期截取出来跟待查询的日期去比较

to_date是把待查询的日期转成日期格式去与数据库中相关列的内容作比较

to_date转的时候,如果要过滤的日期是20100519,转成yyyymmdd的格式标准日期格式之后,后面会拼上时分秒,默认为00:00:00

--如果表个数是不确定的  写个存储过程吧  调用时输入表名作为参数即可自动

--将记录取出插入pdbase表中

create or replace procedure p_name

(M_tablename in varchar)   --需要提取数据的表名

as

--定义过程中的变量,变量类型根据自己需要定义,varchar2类型的需带精度

L_column1     varchar2(20);

L_column2     varchar2(20);

L_column3     varchar2(20);

--定义一个游标

CURSOR C_CHARGES IS

select column1,column2,column3     --记录的列多的话,可以多定义几个

from M_tablename

where datetime >=

to_date('2004-05-27 07:00:00', 'yyyy-mm-dd hh24:mi:ss')

and

datetime <=

to_date('2004-06-27 07:00:00', 'yyyy-mm-dd hh24:mi:ss')

begin

OPEN C_CHARGES;

LOOP

FETCH C_CHARGES

INTO L_column1,L_column2,L_column3

EXIT WHEN C_CHARGES%NOTFOUND;

insert into pdbase

(column1,column2,column3)

values

(L_column1,L_column2,L_column3)

end loop;

CLOSE C_CHARGES;

end;

--如果表个数是确定的,且只要查询效果,可直接使用合并查询

select * from t_test_1

where dt>=to_date('2010-04-03 07:00:00', 'yyyy-mm-dd hh24:mi:ss') and

dt<=to_date('2010-04-10 07:00:00', 'yyyy-mm-dd hh24:mi:ss')

union

select * from t_test_2

where dt>=to_date('2010-04-03 07:00:00', 'yyyy-mm-dd hh24:mi:ss') and

dt<=to_date('2010-04-10 07:00:00', 'yyyy-mm-dd hh24:mi:ss')

union

select * from t_test_3

where dt>=to_date('2010-04-03 07:00:00', 'yyyy-mm-dd hh24:mi:ss') and

dt<=to_date('2010-04-10 07:00:00', 'yyyy-mm-dd hh24:mi:ss')

--有几个表,写几个union连接在后面即可

select * from tablename where eventtimestamp >=

to_date('2004-05-27 07:00:00', 'yyyy-mm-dd hh24:mi:ss')

and eventtimestamp <=

to_date('2004-06-27 07:00:00', 'yyyy-mm-dd hh24:mi:ss')

log_table表

table_date是字段

from_str to_str 2个时间段字符串

select * from log_table where table_date >= TO_DATE('from_str','YYYY-MM-DD HH-MM-SS') and table_date <= TO_DATE('to_str','YYYY-MM-DD HH-MM-SS')

INSERT INTO pdbase (A,B,C....)SELECT A,B,C FROM (SELECT A,B,C...FROM 表1 union SELECT A,B,C...FROM 表2 union SELECT A,B,C...FROM 表3 union ....) WHERE pdbase.P_DATE BETWEEN TO_DATE('2004-05-27 07:00:00','yyyy-mm-dd hh24:mi:ss'  ) AND TO_DATE('2004-06-27 07:00:00', 'yyyy-mm-dd hh24:mi:ss')

insert pdbase into (

select * from biao1  where 日期 > ?

and 日期< ?

union all

select * from biao2  where 日期 > ?

and 日期< ?

......

select   *   from   mytable   where   to_char(install_date,'YYYYMMDD')   >   '20050101'

select   *   from   mytable   where   install_date     >   to_date('20050101','yyyymmdd');

取得当前日期是本月的第几周

SQL>   select   to_char(sysdate,'YYYYMMDD   W   HH24:MI:SS')   from   dual;

TO_CHAR(SYSDATE,'YY

-------------------

20080327   4   18:16:09

SQL>   select   to_char(sysdate,'W')   from   dual;

T

-

4

№2:取得当前日期是一个星期中的第几天,注意星期日是第一天

SQL>   select   sysdate,to_char(sysdate,'D')   from   dual;

SYSDATE       T

---------   -

27-MAR-08   5

类似:

select   to_char(sysdate,'yyyy')   from   dual;   --当前年

select   to_char(sysdate,'Q'   from   dual;           --当前季度

select   to_char(sysdate,'mm')   from   dual;       --当前月

select   to_char(sysdate,'dd')   from   dual;       --当前日

ddd   年中的第几天

WW   年中的第几个星期

W   该月中第几个星期

DAY 周中的星期几

D   今天对映的NUMBER

'1','星期日',  '2','星期一', '3','星期二', '4','星期三', '5','星期四',  '6','星期五',  '7','星期六'

hh   小时(12)

hh24   小时(24)

Mi   分

ss   秒

№3:取当前日期是星期几的中文显示:

SQL>   select   to_char(sysdate,'day')   from   dual;

TO_CHAR(SYSDATE,'DAY')

----------------------

星期四

№4:如果一个表在一个date类型的字段上面建立了索引,如何使用

alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'

№5: 得到当前的日期

select sysdate from dual;

№6: 得到当天凌晨0点0分0秒的日期

select trunc(sysdate) from dual;

-- 得到这天的最后一秒

select trunc(sysdate) + 0.99999 from dual;

-- 得到小时的具体数值

select trunc(sysdate) + 1/24 from dual;

select trunc(sysdate) + 7/24 from dual;

№7:得到明天凌晨0点0分0秒的日期

select trunc(sysdate+1) from dual;

select trunc(sysdate)+1 from dual;

№8: 本月一日的日期

select trunc(sysdate,'mm') from dual;

№9:得到下月一日的日期

select trunc(add_months(sysdate,1),'mm') from dual;

№10:返回当前月的最后一天?

select last_day(sysdate) from dual;

select last_day(trunc(sysdate)) from dual;

select trunc(last_day(sysdate)) from dual;

select trunc(add_months(sysdate,1),'mm') - 1 from dual;

№11: 得到一年的每一天

select trunc(sysdate,'yyyy')+ rn -1 date0

from

(select rownum rn from all_objects

where rownum<366);

№12:今天是今年的第N天

SELECT TO_CHAR(SYSDATE,'DDD') FROM DUAL;

№13:如何在给现有的日期加上2年

select add_months(sysdate,24) from dual;

№14:判断某一日子所在年分是否为润年

select decode(to_char(last_day(trunc(sysdate,'y')+31),'dd'),'29','闰年','平年') from dual;

№15:判断两年后是否为润年

select decode(to_char(last_day(trunc(add_months(sysdate,24),'y')+31),'dd'),'29','闰年','平年') from dual;

№16:得到日期的季度

select ceil(to_number(to_char(sysdate,'mm'))/3) from dual;

select to_char(sysdate, 'Q') from dual;

No17:返回某个月的最后一天

select to_char(last_day(sysdate),'dd') from dual

转载:http://hi.baidu.com/fengboy_7334/blog/item/b0aa60035f36a1e809fa935d.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值