关于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' )
2 个月之前 回复
GJ454221763
Real._ 嗯嗯,十分感谢你!我用的是存储函数,里面用递归成功解决了。
3 个月之前 回复
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表中以某一天时间为条件的查询几种写法
写法一:将列转为字符串 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数据库使用时间作为查询条件时的写法
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数据库按照时间查询数据
数据库时间类型为timstamp,按照时间进行数据查询 select * from table1 where TS between TO_DATA(‘2017-7-25 16:30:00’,’yyyy-mm-dd h24:mi:ss’) and TO_DATA(‘2017-7-25 19:30:00’,’yyyy-mm-dd h24:mi:ss’ 查看两个时间差之前大于5秒的数据 se
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').
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数据库基于表中某时间字段的范围进行条件查询
进入前端组第二个星期,开始接收小任务:用户从前端页面输入一个设备运行的时间段,点击查询按钮后显示在这个时间段内运行的设备编号。       分析:从前端输入时间段,最终将由前端的后台程序接收该时间段的开始时间和结束时间,而数据库存有张表用来存储设备运行状态,则该任务的本质就是利用该时间段的开始时间和结束时间对数据库中设备状态表进行约束,作条件查询。 对数据库设备状态表进行研究后,发现设备状态表
DB: 表查找符合条件的最小日期
select * from my_table_name where primay_key = %primary_key% and rownum <2 // 行数为1行 order by rpt_date; // 按从小到大排序(反之,则添加desc)
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如何在where条件中写日期?
sql如下: SELECT * FROM T_QUERY_LOG t WHERE t.CREATEDATE >= to_date('2016-7-1','yyyy-mm-dd') AND  t.CREATEDATE ; 查询结果如下:
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
MySQL和Oracle数据库sql查询日期比较条件的差异
背景 最近项目中有个需求.需要查询更新时间大于发布时间的对象;同时还要适配MySQL和Oracle两种数据库; 实现 思路 1.对传进来的时间参数进行格式化; 2.通过读取配置文件来判断是MySQL数据库还是Oracle数据库; 3.分别使用不同的sql语句拼接 SimpleDateFormat formatter = new SimpleDateFormat(&quot;yyyy/MM...
oracle 查询数据,与日期相关的条件写法(to_date()函数)
select * from ST_RIVER_R t   where stcd='50101100' and tm               between  to_date('2018-01-01 ','yyyy-mm-dd ')              and to_date('2018-05-30 01:00:00','yyyy-mm-dd hh24:mi:ss') 使用日...
sql 时间范围查询条件
--一年内注册查询 select * from User where datediff(year,Createdate,getdate())=0 --一月内注册查询 select * from User where datediff(month,Createdate,getdate())=0 --一天内注册查询 select * from User where dat
Oracle中时间字段作为筛选条件
我们知道oracle数据库中存的日期字段可能有好几种写法,这样我们在作为筛选条件的时候就会无从下手,这时候我们可以用一个函数 to_char(),帮我们搞定,我们以employees表为例可以这样写:select employee_id, first_name ,hire_date from employees whereto_char(hire_date,'yyyy-mm-dd') betwee...
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...
oracle 时间条件值范围越大就不走索引问题解决:使用强制索引
oracle 时间条件值范围越大就不走索引问题解决:使用强制索引   在写一个比较复杂的统计语句的时候,其中涉及到了时间的条件。但在执行测试过程中发现开始时间和结束时间的范围在两三天的时候执行计划里是走的索引,查询很快,当把时间范围扩大到五天、十天、一个月的时候执行计划里反而全表扫描了,查询效率慢了几十倍不止,这对于统计一个大表来说是致命的。   经过资料查询发现在oracle中有一个因素影响...
关于oracle-sql-时间区间查询精确到时分秒
自己要写一个时间区间条件查询的需求,自己收集出来的资料,供给大家参考!总共有2种方式.第一种//我采用的 select * from t1 where 1=1 and t1.validate_state='1' and t1.START_DATE >= to_date( #
Oracle数据库常用where进行日期比较
Oracle比较字符串是根据ASCII进行的比较,第一个字母的ASCII大小比较,如果相等再比较下一个,依次类推。 字符串和数字进行操作是会报异常的,因为类型不一样不能进行比较。 但是,Oracle在执行sql的时候有些时候会自动转换类型,叫做隐式转换。 比如:where id = '1'; 即使id是数字型的也可以查出来,Oracle会利用to_char函数将数字转换成字符,再和字符'1'...
Orcale中group by的使用(转)
  1、概述 “Group By”根据“By”指定的规则对数据进行分组。   2、原始表   3、简单Group By 示例1 select 类别, sum(数量) as 数量之和 from A group by 类别 返回结果如下表,实际上就是分类汇总。   4、Group By 和 Order By 示例2 select 类别, sum(数量) AS 数量...
mybatis中日期作为条件
mybatis中sql查询对于日期不能直接写大于、小于,要用CDATA对日期进行处理,例如希望对大家有所帮助!
关于 java 按时间条件查询 sql语句
oracle 按时间查询可以有2种形式 to_date  and  to_char for example: // 将数据库字段转成char 进行查询 select * from tableName where to_char(字段名,'yyyy-mm-dd') //将条件转成date进行查询 select * from tableNmae where time 两者
ORACLE死锁(ORA-00060)故障排查的一般性手法
ORACLE死锁(ORA-00060)故障排查的一般性手法 【背景】 今晨巡检发现SAP PRD产生一个死锁: Sun Jun 29 10:30:36 2014 ORA-00060: Deadlock detected.  More info in file /oracle/PRD/saptrace/diag/rdbms/prd/PRD/trace/PRD_o
『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...
WHERE条件中使用TRUNC(时间字段)非常影响效率
--不要对时间字段进行函数处理,非常慢 低能--每提取一条记录都要对时间字段进行函数处理才能确定是否合适 SELECT COUNT(1) FROM A_BASIC_CS_RADIO_H WHERE TRUNC(COLLECTTIME) = TRUNC(SYSDATE) - 1 一般耗时4-5秒。 高效--直接可以判断是否合适 SELECT COUNT(1) FRO...
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
java涉及时间条件查询
var txtBgDate = new Ext.form.field.Date({ name: 'bgDate', fieldLabel: '开始日期', format: 'Y-m-d', maxValue:new Date(), value:MyDateUtil.dateToStr('yyyy-MM-01', new Date()), maxLength: 20, l
oracle 条件查询当天、当周、当月、当季度
Oracle 字段类型为varchar2,格式要与格式化的样式匹配 当天 select * from 表名 where to_char(to_date(字段名,'yyyy-mm-dd hh24:mi:ss'),'dd')=to_char(sysdate,'dd') 当周 select * from 表名 where to_char(to_date(字段名,'yyyy-mm-dd hh24:mi:s...
linux find根据时间条件查找文件
find / -amin -10 # 查找在系统中最后10分钟访问的文件find / -atime -2 # 查找在系统中最后48小时访问的文件find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件find / -mtime -1 #查找在系统中最后24小时里修改过的文件...
Oracle 条件运算符
比较运算符  >, >=. =:等于  !=, 逻辑运算符运算的优先顺序是NOT,AND,OR。如果要改变优先顺序,可以使用括号  逻辑运算符  AND:逻辑与,表示两个条件必须同时满足  OR:逻辑或,表示两个条件中有一个条件满足即可  NOT:逻辑非,返回与某条件相反的结果  特殊运算符  [NOT] BETWEEN…AND…:用于测试是否在范围内  [NO
SSM项目-医药采购-03 根据条件查询用户信息
需求:根据自定义查询,查询用户信息 1.1    Dao: 主查询表:SYSUSER 关联查询表:userjd(监督单位表),useryy(医院表) 使用mybatis查询用户列表。  需要多表查询,需要自定义mapper ---子查询方法 select * from (   select SYSUSER.id,          SYSUSER.u
GROUP BY 条件查询最新时间记录
概述:最近项目一个查询需求是从一个表中同一个IP多条记录的只获取一条IP记录,而这条IP记录要最新的。很明显需求没什么难,分组当然想到的是group by,但是这里是有个时间条件筛选的。虽然网上很多答案,但是我发现实际操作上是没有生效的,不知道是MYSQL版本问题还是答主们只是理论而没有实际尝试过,这里分享一下我的处理方式。 准备:1、首先看我准备了同一个IP两条数据,时间不一样的。 2、
关于Oracle的时区问题
时区的计算方法: 已知北京时间2013-12-13 13:00,求东京时间 东京时间 = 13:00-(8-9) = 2013-12-13 14:00     注:北京为东八区,东京为东九区 已知纽约时间2013年-12-13 6:00,求旧金山时间 旧金山时间 = 6:00-(-5-(-8)) = 2013-12-13 3:00  注:纽约为西五区、旧金山为西八区 已知北京时间为201
oracle 判断条件不在某一时间范围内(not between)
判断条件在某一段时间范围内用 BETWEEN SELECT * FROM P_VOTE t WHERE to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') BETWEEN to_char(t.BEGIN_TIME, 'yyyy-mm-dd hh24:mi:ss') AND to_char(t.END_TIME, 'yyyy-mm-dd hh24:mi:ss') ...
oracle 查询数据库的约束条件
1、查找表的所有索引(包括索引名,类型,构成列): select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and t.table_name = i.table_name and t.table_name = 表名 2、查找表的主键(包括名称,构
ibatis中oracle timestamp 条件查询特别是包括当天的内容
在ibatis中可以这样实现:       =to_date('$start_date$','YYYY-MM-DD hh24:mi:ss')]]>              但是最重要的是要在实体类中进行变化,因为通常我们在前台页面对start_date选择的参数是'YYYY-MM-DD这样类型,而没有时分秒,因此需要在实体类中进行变化如: private String star
Oracle的排序查询
---------排序查询/*语法: SELECT * |列名 FROM 表名 {WEHRE 查询条件} ORDER BY 列名 1 ASC【升序】|DESC【降序】,列名 2...ASC|DESC*/ -- 范例:查询雇员的工资从低到高select*from emp orderby sal asc;select*from emp orderby sal; --范例: 查询员工的奖金有小到大sel...
oracle 查询语句根据参数值来动态生成条件
select * from  student where age=&age and sex=1 and name=&name and  .....   这是多个条件的语句. 可用户要选择不同的条件来看同样的信息.  要看 年龄大于20岁的, 性别是女的, 姓名是什么
ORACLE sql 排序 根据两个条件排序,根据日期由小到大排序,同时如果另一个字段符合某个条件的话就优先排列
现在我们有一张表 xl_bx , 数据库中的初始排序: 现在 我们需要对表里的数据进行排序,需求是这样的:数据按照日期排序,时间早的的排在前面 ,但是表中bxxl字段的内容是‘紧急管网报修’的话 我们需要对其进行优先排序。接下来直接看实现sql以及最终实现效果。  ...
文章热词 Oracle Oracle学习 Oracle课程 Oracle培训 Oracle学习
相关热词 c++ 关于unique的问题 bootstrap3 按条件查找 c++重载关于时间加减的 关于python培训班 关于区块链的课程