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; №2:取得当前日期是一个星期中的第几天,注意星期日是第一天 SQL> select sysdate,to_char(sysdate,'D') from dual; 类似: select to_char(sysdate,'yyyy') from dual; --当前年 DAY 周中的星期几 '1','星期日', '2','星期一', '3','星期二', '4','星期三', '5','星期四', '6','星期五', '7','星期六' №3:取当前日期是星期几的中文显示: SQL> select to_char(sysdate,'day') from dual; №4:如果一个表在一个date类型的字段上面建立了索引,如何使用 alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
№6: 得到当天凌晨0点0分0秒的日期 -- 得到这天的最后一秒 -- 得到小时的具体数值 select trunc(sysdate) + 7/24 from dual; №7:得到明天凌晨0点0分0秒的日期 select trunc(sysdate+1) from dual; select trunc(sysdate)+1 from dual;
№10:返回当前月的最后一天?
№13:如何在给现有的日期加上2年 №14:判断某一日子所在年分是否为润年 №15:判断两年后是否为润年
select ceil(to_number(to_char(sysdate,'mm'))/3) from dual; select to_char(sysdate, 'Q') from dual; 作者:ZHF |
|