公司业务涉及通过时间范围来查询所需要的字段,瞎折腾了几下,写出来记录.
查询之前一定要看字段是不是date类型,自己傻呵呵的去用to_char,to_date去查,怎么都搜不到结果,还以为自己写的有问题
从最经典的问题开始,我查询某一个时间点到另一个时间点的数据,怎么做?
select * from 表名 where
to_char (查询字段,'yyyy-mm-dd')>='查询时间'
and
to_char (查询字段,'yyyy-mm-dd')<='查询时间';
select * from 表名 where 查询字段>=
to_date ('查询日期' ,'yyyy-mm-dd')
and 查询字段<=
to_date ('查询日期','yyyy-mm-dd');
更改date为指定格式-不支持毫秒,所以ff没法用-会报错
alter session set nls_date_format = 'dd-MON-yy hh:mi:ss.ff AM';
更改timestamp为指定格式-21-7月 -17 12.02.15.000000 上午
alter session set NLS_LANGUAGE = 'SIMPLIFIED CHINESE';
alter session set nls_timestamp_format = 'dd-MON -yy hh:mi:ss.ff AM';
to_date的特点是,如果查询10月1日到10月29日数据,那么数据中包含1日的数据不包含29日的数据,需要顺延一天
to_char可以正常显示
查询以小时为单位的数据时发现,
要保持与yyyy-mm-dd hh24:mi:ss一致的时间格式
to_date可以正常查询
to_char的话不能含有空格否则查询不出来.
那么如果遇到以日期为单位的表名,查询表里具体的字段,如何写?
外面走循环生成SQL表名,生成的SQL,一次一次的向数据库发送请求
还有一种处理是使用游标
还有一种处理是使用@SQL拼接?
另外sysdate 查询的是数据库时间,可以通过
1、首先通过语句查询一下当前的时区是什么?
SELECT DBTIMEZONE FROM DUAL;
此时返回的结果是'+0.00',这就意味着当前的Oracle时间是GMT+0.00,就是格林威治标准时间。
2、修改Oracle的时区设置。
ALTER DATABASE SET TIME_ZONE='+8.00';
修改之后,重新启动Oracle数据库。
网友评论