另类解读SQL Server中的DateTime数据类型

作者:安娜 时间:2009-01-06 11:22:00 

看到这个标题,你我可能都笑了。你会笑,因为你以为这个东西太小儿科了,还用得着做一个标题?!我会笑,是因为我确信你看完后会改变你的想法。

首先我引入一个问题:如何与一个DateTime类型的字段值进行相等比较?

其实这个问题看起来容易,但有下面的问题存在:

1、一般来说,用户输入的日期值就是yyyy/mm/dd,不带时、分、秒;

2、数据库中存储的日期值是带时、分、秒的。

所以我必须假定:我们所谓的两个日期相等就是年、月、日相等。

两种方法:

◆1、有了这样的假定,你我都会有这样的想法:把两个日期的年、月、日取出来分别比较就行了,三者相等即可(也可按统一格式做成一个串再比较)。

◆2、上面的方法虽然可行。但你会发现几乎把日期函数用了个遍!不妨按下面的思路想一下:如果只指定日期,则时间默认为 12:00 AM(午夜)(取自:SQL Server联机帮助)。假定我们要查的日期是2004/7/10,则其实我们想要的就是这一天的00:00:00至23:59:59之间的。提到之间,我们就会想到between...and!!只要 between 2004/7/10 and 2004/7/11 即可了。具体地说:between Cast('2004-7-10' as DateTime) and dateadd(day, 1, Cast('2004-7-10' as DateTime))。但这个方法有一个小小问题,它会把7/11 0点的东西也找到,而这其实不应算做7/10的。如果你还想精益求精的话,就只能用...>=... and ...<... 了。(一般情况下没有必要)

等于讨论完后,再想想大于(或小于)某个日期,我们自然可以还用 between ... and 的,再一次论证上面方法的通用性。

注意:有了上面的讨论,你一定明白了,and 后的日期一定要加一天,否则结束日期就不会查到了。

标签:
0
投稿

猜你喜欢

  • asp程序定义变量比不定义变量速度快一倍

    2012-12-04 20:06:32
  • 通过作业调度建立SQL Server的自动备份

    2008-12-09 14:58:00
  • 讲解数据库加密技术的功能特性与实现方法

    2008-12-18 14:24:00
  • 链接的提示及打开方式

    2008-07-29 13:09:00
  • js处理括弧配对替换的方法

    2008-01-16 13:48:00
  • 巧用特殊的空格字符

    2009-04-10 18:32:00
  • 用CSS实现柱状图(Bar Graph)的方法(一)—基于列表元素的柱状图

    2008-05-26 13:03:00
  • 官方是这样定义 DOCTYPE HTML PUBLIC 的

    2007-05-31 09:43:00
  • 影响SEO的页面制作细节

    2008-10-18 16:06:00
  • Mysql日期和时间函数大全

    2011-03-08 09:52:00
  • css样式命名规则

    2008-04-30 12:31:00
  • 如何实现某一页面只让特定的用户浏览?

    2010-05-19 21:44:00
  • MYSQL教程:保证安全的备份MYSQL数据库的方法

    2010-03-03 17:12:00
  • 如何解决因使用On Error Resume Next导致错误不正确的问题?

    2009-12-16 18:34:00
  • AJAX概述

    2007-11-03 13:41:00
  • MySQL两种表存储结构性能比较测试过程

    2007-12-09 12:45:00
  • Mootools 1.2教程(16)——排序类和方法简介

    2008-12-10 14:18:00
  • CSS框架的相关汇总(CSS Frameworks)

    2008-04-02 12:00:00
  • asp如何实现网上考试功能?

    2010-05-24 18:32:00
  • 一个可应用在ASP 标记加密文件的MD5的DLL组件

    2008-04-12 07:21:00
  • asp之家 网络编程 m.aspxhome.com