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

数据库技巧
数据库删除完全重复和部分关键字段重复的记录
SQL服务器面临的危险和补救.读[十种方法]后感.
SQLite不支持Right Join的解决办法GROUP BY
mssql注入躲避IDS的方法
本地SQL注射攻略分析曝光
数据库 左连接 右连接 全连接用法小结
以前架征途时的合区的SQL语句代码备份
sql语句中where 1=1的作用
dba_indexes视图的性能分析
推荐Sql server一些常见性能问题的解决方法
带参数的sql和不带参数的sql存储过程区别
SQL语句详细说明[部分]
PostgreSQL8.3.3安装方法
三表左连接查询的sql语句写法
MSSQL自动同步设置方法
mssql数据同步实现数据复制的步骤
SQL嵌套查询总结
sql2005可实时监测数据库版本控制SQL的触发器
sql 中将日期中分秒化为零的语句
SQL 注入式攻击的本质

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 118 ::
收藏到网摘: 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”这样的形式,这就需要我们将获取的时间格式做一下中间转换,否则语句将不能正常执行,当然,我们同样可以通过数据库函数来进行处理,但相对比较复杂一些。

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