关于Oracle依据时间条件查找的问题

我要从Oracle数据库中查询一条数据,SQL语句如下:

    select  
        tb.data1  
    from table tb 
    where to_char(tb.date,'yyyy-MM-dd') = '2018-12-06'

要实现的功能是:

如果2018-12-06这天查出的数据为空,则时间向前推一天继续查找,也就是继续查2018-12-05的数据;
如果还没有查找到,继续向前推一天,知道查到的数据不为空为止。
这个功能该怎么实现???
(不限存储过程、存储函数)

在线等。。。

0

1个回答

存储过程的话,可以声名一个日期变量; 循环, 日期减一天; 直到查出数据或者当日期小于某天时停止.

0
GJ454221763
Real._ 递归太麻烦了,现在找到了更好的办法:查出最大的日期( SELECT MAX(tt.date) AS maxDate FROM tables tt WHERE to_char(tt.date,'yyyy-MM-dd') <= '2018-12-22' )
5 个月之前 回复
GJ454221763
Real._ 嗯嗯,十分感谢你!我用的是存储函数,里面用递归成功解决了。
6 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
ORACLE———根据时间 为条件查询相关数据
摘要:Oracle中如何通过时间字段为条件来查询相关数据。普及:用到了to_char()这个oracle自带的函数一、小于某一时间(精确到了时分秒):SELECT * FROM OP_BS_CC WHERE TRANS_TIME &amp;lt; TO_DATE ( '2018-04-23 10:39:00', 'yyyy-mm-dd hh24:mi:ss' );1.1.那么大于某一事件只...
Oracle数据库过滤时间戳筛选条件
一开始尝试截取date类型字段substr(时间戳字段,1,10)=‘2199-12-31’,结果出不来,因为date类型字段转成字符串后于单引号内字符串格式不一致; 正确结果是:      `select * from table_name where 时间戳字段 = to_date('2012-06-18','yyyy-mm-dd hh24:mi:ss'));...
oracle 按日期条件查询 to_date
oracle数据库按日期条件查询需要用到to_date()函数进行格式转换。 语法:to_date('date', 'format'); 以‘2017-02-06 15:02:00’为例: to_date('2017-02-06 15:02:00', 'yyyy-MM-dd hh24:mi:ss').
RMAN基于SCN或特定时间点的不完全恢复
点击有惊喜 前提: 数据库已开启归档: SQL> archive log list Database log mode           Archive Mode Automatic archival            Enabled Archive destination           /u01/app/oracle
Oracle条件查询
-------------------------------------------------Oracle条件查询-------------------------------------------------. 限定查询在查询绝大多数都会有条件的限制语法:select *|列名 from表名 where 条件例如:查询工资大于1500的所有雇员1.  非空和空的限制Ø  示例:查询每月能得...
oracle中表中含有的日期字段如何作为筛选条件
oracle中表中含有的日期字段如何作为筛选条件
oracle中date类型作为查询条件的处理方法(菜鸟版)
Oracle数据库中表的字段设置为:date类型(这里我不需要时间,因此采用了date型,如果需要时间似乎应采用timestamp类型); 模型层表对应的pojo类及hibernate映射文件中属性的类型为java.util.Date; 表现层采用Dorado处理,dataset中相应的字段也设置为:date类型; 利用MyEclipse中自带的hibernate逆向工程自动生成DAO类。 ...
关于Oracle数据库基于表中某时间字段的范围进行条件查询
进入前端组第二个星期,开始接收小任务:用户从前端页面输入一个设备运行的时间段,点击查询按钮后显示在这个时间段内运行的设备编号。       分析:从前端输入时间段,最终将由前端的后台程序接收该时间段的开始时间和结束时间,而数据库存有张表用来存储设备运行状态,则该任务的本质就是利用该时间段的开始时间和结束时间对数据库中设备状态表进行约束,作条件查询。 对数据库设备状态表进行研究后,发现设备状态表
MySQL根据时间条件查询数据
有时我们面要统计一下数据库中指定日期的数据,如常用的,今天,昨天,明天,本周、上周、本月、上个月份的数据,还有对日期的加减, 除了我们可以使用strtotime来算还可以参考下面方法。   SQL减去指定天数 SELECT * from 表名 where DATE_FORMAT(时间字段,&quot;%Y-%m-%d&quot;) = DATE_ADD(输入时间,INTERVAL -1 DAY); /** ...
DB: 表查找符合条件的最小日期
select * from my_table_name where primay_key = %primary_key% and rownum <2 // 行数为1行 order by rpt_date; // 按从小到大排序(反之,则添加desc)
Oracle where条件,当天时间段
AND QY.DATA_TIME >= trunc(sysdate) AND QY.DATA_TIME < to_date(to_char(sysdate,'yyyy-mm-dd')||'23:59:59', 'YYYY-MM-DD HH24:MI:SS') 如果要查询昨天的: AND QY.DATA_TIME >= trunc(sysdate-1) AND QY.DATA_TIME < to_da
sql 查询中日期条件的优化
1.实例分析如下:select count(0) from info_terminal_user a where trunc(a.REG_DATE,dd) = sysdate;执行计划----------------------------------------------------------   0      SELECT STATEMENT Optimizer=CHOOSE (Cos
Oracle数据库查询条件为日期类型的字段
SELECT     * FROM     abc WHERE     TRANS_TIME          BETWEEN              &quot;TO_DATE&quot;('2018-04-23 10:38:00', 'yyyy-mm-dd hh24:mi:ss')         AND             &quot;TO_DATE&quot; ('2018-04-23 10:40:00','yyyy-mm...
sql 时间范围查询条件
--一年内注册查询 select * from User where datediff(year,Createdate,getdate())=0 --一月内注册查询 select * from User where datediff(month,Createdate,getdate())=0 --一天内注册查询 select * from User where dat
查询两个日期(时间)以内的数据,between and 或 and 连>= <=,to_date()
between and 方法 [code=&quot;sql&quot;]select * from kk.kkhmd where larq between(to_date('2008-9-3','yyyy-mm-dd')) and (to_date('2008-9-5','yyyy-mm-dd'))[/code] 用and连接 &gt;= =to_date('2008-9-3','yyyy-mm-dd') a...
oracle如何在where条件中写日期?
sql如下: SELECT * FROM T_QUERY_LOG t WHERE t.CREATEDATE >= to_date('2016-7-1','yyyy-mm-dd') AND  t.CREATEDATE ; 查询结果如下:
oracle表中以某一天时间为条件的查询几种写法
写法一:将列转为字符串 select * from Example where to_char(DATE_T,'yyyy-mm-dd')='2018-07-30'; 在不考虑sql语句的查询性能的情况下可以考虑这种写法。 写法二:对列截取或模糊查询 select * from Example where trunc(DATE_TRAVEL) = to_date('2018-07-30','...
oracle 时间条件值范围越大就不走索引问题解决:使用强制索引
oracle 时间条件值范围越大就不走索引问题解决:使用强制索引   在写一个比较复杂的统计语句的时候,其中涉及到了时间的条件。但在执行测试过程中发现开始时间和结束时间的范围在两三天的时候执行计划里是走的索引,查询很快,当把时间范围扩大到五天、十天、一个月的时候执行计划里反而全表扫描了,查询效率慢了几十倍不止,这对于统计一个大表来说是致命的。   经过资料查询发现在oracle中有一个因素影响...
MySQL和Oracle数据库sql查询日期比较条件的差异
背景 最近项目中有个需求.需要查询更新时间大于发布时间的对象;同时还要适配MySQL和Oracle两种数据库; 实现 思路 1.对传进来的时间参数进行格式化; 2.通过读取配置文件来判断是MySQL数据库还是Oracle数据库; 3.分别使用不同的sql语句拼接 SimpleDateFormat formatter = new SimpleDateFormat(&quot;yyyy/MM...
Oracle查询优化-07日期运算
7.1 加减日、月、年在oracle中,date类型可以直接加减天数,而加减月份要用add_months函数.select a.hiredate 雇用日期, a.hiredate + 5 加5天, a.hiredate - 5 减5天, add_months(hiredate, 5) 加5个月, add_months(hiredate,
oracle数据库使用时间作为查询条件时的写法
select 目标列 from 表名 where 时间列=to_date('时间','yyyy-mm-dd hh24:mi:ss');比如select name from birth_info where birthday between to_date ('2001-03-05','yyyy-mm-dd')andto_date ('2001-03-15','yyyy-mm-dd');
Oracle中时间字段作为筛选条件
我们知道oracle数据库中存的日期字段可能有好几种写法,这样我们在作为筛选条件的时候就会无从下手,这时候我们可以用一个函数 to_char(),帮我们搞定,我们以employees表为例可以这样写:select employee_id, first_name ,hire_date from employees whereto_char(hire_date,'yyyy-mm-dd') betwee...
mybatis关于时间条件查询写sql语句,处理办法(数据库为oracle)查询不到数据解决办法
1、查询之前先把时间格式转成string类型 自定义查询时间sql语句: &amp;lt;select id=&quot;findPushcarTypeAndPushWayAndPushDate&quot; resultMap=&quot;BaseResultMap&quot;&amp;gt;       select * from MASOCT_BROADCAST  where  PUSH_CAR_TYPE like #{pushCarTyp...
Oracle PLSQL之HAVING后面的条件可由聚合函数构成,也可由GROUP BY后的字段构成
HAVING主要用于对分组后的数据进行过滤,一般我们在其后接聚合函数(SUM,COUNT等),除此之外我们还可以用GROUP BY后面的字段组成HAVING后的过滤条件。 SQL> select * from dept; DEPTNO DNAME LOC ------ -------------- ------------- 10 ACCOUNTING NEW
ORACLE按条件导出数据库文件
exp jttda/jtt1@172.16.179.98/orcl file=d:\daochu.dmp tables=(o_hw_raw_hwdata) query=\&quot;where rksj &amp;gt;= to_date('20181101000000','yyyymmddhh24miss')\&quot;
oracle 当查询结果有重复记录时 选择时间最近的一条
select   dd.receive_person,        dd.borrow_date,        dd.return_date,        dd.check_status,        da.reason,        dd.pk,        rb.resource_name,        rb.resource_brand,        da.
Oracle各种时间查询
1.获取时间的日: select to_char(sysdate,’dd’) as nowday from dual 2. –获取时间的时: select to_char(sysdate,’hh24’) as nowhour from dual; 3.–获取时间的分: select to_char(sysdate,’mi’) as nowminute from dua...
WHERE条件中使用TRUNC(时间字段)非常影响效率
--不要对时间字段进行函数处理,非常慢 低能--每提取一条记录都要对时间字段进行函数处理才能确定是否合适 SELECT COUNT(1) FROM A_BASIC_CS_RADIO_H WHERE TRUNC(COLLECTTIME) = TRUNC(SYSDATE) - 1 一般耗时4-5秒。 高效--直接可以判断是否合适 SELECT COUNT(1) FRO...
『ORACLE』通过指定条件查表名(11g)
通过字段查询表 select table_name from user_tab_columns where column_name = 'NAME'; 通过索引名查询表名和相应的字段名 select index_name,table_name,column_name from dba_ind_columns where index_name='PK_EMP'; 根据字段名查询表和对应字段 sele...
Oracles删除或查询条件相同的数据,除了最新那条
例如: 1.删除 uname=’mm’ 的数据,除了最新那条: DELETE FROM 表名 WHERE uname=’mm’ AND last_modify_time NOT IN (SELECT last_modify_time FROM (SELECT MAX(last_modify_time) last_modify_time FRO...
Oracle 条件查询
发现一个 特别 NB 的 条件查询 语句,真的 NBselect *  from tb_data  where  instr( (t_score1),'8' )&amp;gt;0 对,你没看错 ,这个是真的牛,表名为 “tb_data”,字段为“t_score1”,用了个函数“instr()”,这样写 就查出“t_score1”字段模糊匹配 ‘8’ 的那些数据。我以前写条件查询都是写 “ 字段名 = 字段...
mybatis关于Date日期的模糊查询sql语句写法
&amp;lt;select id=&quot;selectData&quot; resultMap=&quot;ResultMap&quot; parameterType=&quot;fr.gk.com.xxzx.common.pojo.Mark&quot;&amp;gt; select * from mark where 1=1 &amp;lt;if test=&quot;user != null and user != '' &quot;&amp;gt; an
ibatis中oracle timestamp 条件查询特别是包括当天的内容
在ibatis中可以这样实现:       =to_date('$start_date$','YYYY-MM-DD hh24:mi:ss')]]>              但是最重要的是要在实体类中进行变化,因为通常我们在前台页面对start_date选择的参数是'YYYY-MM-DD这样类型,而没有时分秒,因此需要在实体类中进行变化如: private String star
【Oracle】日期简单查询
以系统日期为例 1、查询年月日 2、查询年 3、查询月 4、查询日 5、查询星期 (注:周日-周一:依次为1,2,3,4,5,6,7) (注:星期英文缩写) (注:强制转换为中文) 6、查询查询日为本月第几天 7、查询查询日为本年第几天 8、查询本月1号、本年1号   9、trunc()函数  TRUNC(SYSDATE,'Y...
oracle进行order by,排序字段值相同时,导致分页数据出现相同,加入rowid的解决方法
由于项目开发中遇到order by排序有相同的值,导致分页数据总查询出第一页的数据,查了些资料说是要在order by条件后面再加入rowid可以解决这个问题;项目又要兼容多种数据库,所以只能在java中拦截和修改oralce查询语句中order by动态拼接的语句,搞了几小时终于弄好了,基本耗在正则表达式上了,做一下记录 //将sql转小写,方便正则匹配 String strin
Oracle数据库常用where进行日期比较
Oracle比较字符串是根据ASCII进行的比较,第一个字母的ASCII大小比较,如果相等再比较下一个,依次类推。 字符串和数字进行操作是会报异常的,因为类型不一样不能进行比较。 但是,Oracle在执行sql的时候有些时候会自动转换类型,叫做隐式转换。 比如:where id = '1'; 即使id是数字型的也可以查出来,Oracle会利用to_char函数将数字转换成字符,再和字符'1'...
Power BI(四)Power Query分组依据、添加列、日期和时间的整理、数学运算
Power Query分组依据、添加列、日期和时间的整理、数学运算 本章博客主要讲解以下知识点: 分组依据 添加列 日期和时间的整理 数学运算 分组依据 有以下的数据,相统计每个客户的金额汇总,虽然excel透视表也可以做但是手动的 还是加载进查询编辑器 统计客户每个订单购买的金额汇总 每一个订单编号有多少条记录 为了不破坏原始数据,...
linux find根据时间条件查找文件
find / -amin -10 # 查找在系统中最后10分钟访问的文件find / -atime -2 # 查找在系统中最后48小时访问的文件find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件find / -mtime -1 #查找在系统中最后24小时里修改过的文件...
ORACLE 存储过程 in 参数问题
直接  SUBSTR(r.rlpfid,1,2) IN (i_water_property)  时,当参数为一个数字时不存在问题,如01 ,若参数为01,02 则查不出结果,这时候用动态sql执行即可 execute immediate ' insert into temp_am(total_ysl,rlmiid)select ar.total_ysl,ar.rlmiid from
根据条件查找不同的表
SELECT              u.user_name As &quot;fyUser.userName&quot;,             a.id AS &quot;id&quot;,             a.del_flag AS &quot;delFlag&quot;,             a.istatus AS &quot;istatus&quot;,             a.user_id AS &quot;fyuser.id&quot;,          ...
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 大数据课程开课依据 关于大数据培训