当前位置: 首页 > 图文教程 > 数据库 > 数据库技巧 > sqlserver和oracle中对datetime进行条件查询的一点区别小结

数据库技巧
执行Insert Exec时的隐藏开销 分析
datastage server job之dsjob 命令
sql Union和Union All的使用方法
对分区表进行alter-switch时遇到的错误
sql left join 命令详解
sql 插入数据的三种常用方法及小贴士
SQL 优化经验总结34条
数据库 SQL千万级数据规模处理概要
数据库分页查询方法
postgres 数据库中的数据转换
ORACLE 系统函数大全SQLSERVER系统函数的异同
数据库 三范式最简单最易记的解释
主键与聚集索引
数据库触发器(Trigger)的一点使用心得
postgresql sql批量更新记录
sql join on 用法
SQL 按特定字段值排序
jdbc 数据库的连接(sqlserver oracle)
让你的insert操作速度增加1000倍的方法
数据库 关系连接

数据库技巧 中的 sqlserver和oracle中对datetime进行条件查询的一点区别小结


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 121 ::
收藏到网摘: n/a

系统中涉及公文列表的部分,需要支持对时间列的搜索功能,但必须要同时支持sqlserver和oracle两种数据库,而这在这两种数据库中编写查询语句的时候有一些不大一样的地方,无法实现一条语句实现两个数据库的正常查询,所以需要做一些调整。 首先,看一下sql server,之前我们都通过前台用户选择一个起始时间和一个结束时间(以日为最小单位),然后来作为条件进行查询,如果直接通过”between starttime and endtime”来作为条件的话,发现会自动将”2009-06-17”转化为” 2009-06-17 00:00:00”,于是如下查询条件” between ‘2009-06-16' and ‘2009-06-17'”,只能得到16日的数据,17日的数据不能得到,如果想连17日的数据也查到的话,我们可以对用户选择时间进行一下处理:可以为其添加详细的时间条件,如” between ‘2009-06-16 00:00:00' and ‘2009-06-17 23:59:59'”;或者干脆去巧地将结束时间替换为下一天的日期也可,但是这样需要我们对递增日期做一下特殊处理,因为我们可能遇到选择当月最后一日的情况,详细的处理这里就不赘述了。

下面谈谈oracle数据库中的处理,同样是上面两种方式,但是如果采取精确时间的方式的话,我们需要通过oracle的数据库时间函数进行处理,相对比较繁琐,如果直接通过递增结束日期的方式或许更便捷一些,当然,只能适应所选日期最小单位为“日”的情况。还有一点需要说明的是,oracle中采取的日期字符串格式和sql server是不一样的,一般为”5-6月-09”这样的形式,这就需要我们将获取的时间格式做一下中间转换,否则语句将不能正常执行,当然,我们同样可以通过数据库函数来进行处理,但相对比较复杂一些。

其实,有的时候,对很多问题来说,我们可以采取比较正规的方法来处理,但是,如果在需求限定的范围内有一些虽然有所局限,但可以完全满足需求的实现方法,我觉得还是可以大胆地区用的,因为我们编程的终极目的终究是:用最简单的方式达到目的,凡事不能太过死板,这个过程其实也是提高我们对项目需求的理解,最后,就是需要注意我们抄小路必须要回避的一些问题,千万不能太过大意哦。