时间区间查询条件遇到的问题

oracle 数据库的 TO_CHAR 和 TO_DATE的一些用法总结
做了一个功能是以起始时间和截止时间的区间为条件查询数据语句如下:
SELECT createdtime FRoM noticeinfo
WHERE noticeinfo.CREATEDTIME, ‘yyyy-mm-dd‘ >= "TO_DATE"(#{starttime},yyyy-mm-dd‘)
and noticeinfo.CREATEDTIME, ‘yyyy-mm-dd‘ <= "TO_DATE"(#{endtime},yyyy-mm-dd‘)
结果发现当起始时间和截止时间相同时不能查出数据,原因是starttime和endtime时间格式只有年月日,而CREATEDTIME的时间格式是年月日时分秒,这样CREATEDTIME和

endtime年月日相同时,CREATEDTIME却多出时分秒,这样使CREATEDTIME大于endtime,进而不符合条件,所以查不到数据。当把CREATEDTIME的时分秒都设置成零时可以

查到,到这并不是我想要的。
解决方案一:使用TO_CHAR()方法截取CREATEDTIME的年月日再做比较
SELECT createdtime FRoM noticeinfo
WHERE to_char(noticeinfo.CREATEDTIME, ‘yyyy-mm-dd‘) >= "TO_DATE"(#{starttime},‘yyyy-mm-dd‘)
and to_char(noticeinfo.CREATEDTIME, ‘yyyy-mm-dd‘) <= "TO_DATE"(#{endtime},‘yyyy-mm-dd‘)
但是这样语句报错因为TO_CHAR()方法虽然截取了年月日,却把日期变成了字符串,不能和日期进行比较。
解决方案二:最后再使用TO_DATE()方法把字符串转成时间格式
SELECT createdtime FRoM noticeinfo
WHERE "TO_DATE"(to_char(noticeinfo.CREATEDTIME, ‘yyyy-mm-dd‘), ‘yyyy-mm-dd‘) >= "TO_DATE"(#{starttime},‘yyyy-mm-dd‘)
and "TO_DATE"(to_char(noticeinfo.CREATEDTIME, ‘yyyy-mm-dd‘), ‘yyyy-mm-dd‘) <= "TO_DATE"(#{endtime},‘yyyy-mm-dd‘)

时间: 2024-11-09 10:24:23

时间区间查询条件遇到的问题的相关文章

Sql 时间做条件

在sql的查询中我们应该尽量避免在WHERE条件中的字段上用函数,如DATEDIFF,DATEADD,CONVERT 因为这样做会使该字段上的索引失效,影响SQL语句的性能.即使该字段上没有索引,也会给sql带来压力. 在以时间做条件查询的时候,比如要查询1天前的数据多数人会这么写: --前一天数据 SELECT * FROM TableA WHERE DATEDIFF(DAY,dtTime,GETDATE()) < 1 --当前时间到昨天的数据 SELECT * FROM TableA WHE

深圳高新技术企业认定申报时间、条件、优惠政策?

续上一篇再说下深圳高新的申报时间.条件.好处,深高和国高的申请还是有一些不同之处的. 深圳高新技术企业概述: 深圳市高新技术企业是指企业在深圳注册持续进行研究开发与技术成果转化,拥有自主知识产权,并以此为基础开展经营活动的企业.申请了深圳高新技术企业认定的企业还可以申请国家高新技术企业认定,以享受更多的政策优惠和资金扶持,如果企业申请的国家高新企业认定或者深圳高新企业认定超过三年时间,可以进行申请高新复审.深圳高新企业认定申报时间:(一)申报时间 第一批: 网上受理时间:  4月15日--5月1

时间查询条件区间查询

SELECT COUNT(1)  FROM (SELECT w.log_name,               w.cust_party_id,               w.creation_date,               row_number() over(PARTITION BY w.cust_party_id ORDER BY w.creation_date DESC) rn          FROM cop_work_log w         WHERE w.projec

数据库中的八大函数(聚合,数字,字符串,日期和时间,条件,系统信息,加密,格式化)

一.函数    1.聚合函数        sum() avg() count() min() max()    2.数学函数        主要用于处理数字 包括整型 浮点型        /*数学函数*/        SELECT FLOOR(1.5)/*返回小于或者等于参数的最大整数*/floor向下取整        SELECT RAND()/*返回0-1的随机数*/        SELECT ROUND(RAND()*10)/*返回离round(x) x最近的整数 小数点后四舍五

odoo xml 时间搜索条件

今年 <filter string="This Year" name="year" domain="[('date','<=', time.strftime('%%Y-12-31')),('date','>=',time.strftime('%%Y-01-01'))]"/> 今天 <filter icon="terp-go-today" string="Today" domai

数据库时间字段条件操作善用TO_DAYS函数等

to_days函数:返回从0000年(公元1年)至当前日期的总天数.注意如下举例中的几个字段名一般为时间戳记录.1.利用to_days函数查询今天的数据: select * from 表名 where to_days(时间字段名) = to_days(now()); 2.利用to_days函数查询昨天数据 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) – TO_DAYS( 时间字段名) <= 1 其他:1.查询7天数据 SELECT * FROM 表名 whe

mybatis中添加时间字符串条件

<if test="operatorDateStart != null and operatorDateStart !='' " >operator_date >= #{operatorDateStart,jdbcType=VARCHAR}</if><if test="operatorDateEnd != null and operatorDateEnd !='' " ><![CDATA[and operator_da

laravel按月/时间区间查询数据

public function payRollList($time) { $member_phone = Session::get(phone'); $engineer = Engineer::getEngineerByPhone($member_phone); $start=date('Y-m-01',strtotime($time));//获取指定月份的第一天 $end=date('Y-m-t',strtotime($time)); //获取指定月份的最后一天 $repair=DB::tab

时间序列分析算法【R详解】

简介 在商业应用中,时间是最重要的因素,能够提升成功率.然而绝大多数公司很难跟上时间的脚步.但是随着技术的发展,出现了很多有效的方法,能够让我们预测未来.不要担心,本文并不会讨论时间机器,讨论的都是很实用的东西. 本文将要讨论关于预测的方法.有一种预测是跟时间相关的,而这种处理与时间相关数据的方法叫做时间序列模型.这个模型能够在与时间相关的数据中,寻到一些隐藏的信息来辅助决策. 当我们处理时序序列数据的时候,时间序列模型是非常有用的模型.大多数公司都是基于时间序列数据来分析第二年的销售量,网站流