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

本文探讨了在数据库查询中如何正确地比较日期字段,特别是在用户输入日期与数据库存储日期格式不一致时的有效解决方案。文章介绍了两种主要方法:一是通过提取日期部分进行逐项比较;二是利用between...and操作符来实现日期范围的精确匹配。
摘要由CSDN通过智能技术生成
 看到这个标题,你我可能都笑了。你会笑,因为你以为这个东西太小儿科了,还用得着做一个标题?!我会笑,是因为我确信你看完后会改变你的想法。

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

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

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

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

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

  两种方法:

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

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

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

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

软件开发网
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值