tsql – 日期之间的T-SQL夹杂
我正在行使SQL Server 2000中的T-SQL,我有一个表TRANSACTIONS,其日期列TRANDATE界说为DateTime,个中很多列与此题目无关. 该表添补了多年的买卖营业.我碰着了代码,测试,让我感想狐疑.有一个简朴的SELECT,像这样: SELECT TRANDATE,RECEIPTNUMBER FROM TRANSACTIONS WHERE TRANDATE BETWEEN '12/01/2010' and '12/31/2010' ORDER BY TRANDATE 而且它不返回我知道在该表中的两行数据. 通过上面的语句,它按次序返回的最后一行有一个TRANDATE: 当我修改如下所示的语句时,我获得了该表中2010年12月的特殊两行: SELECT TRANDATE,RECEIPTNUMBER FROM TRANSACTIONS WHERE TRANDATE BETWEEN '12/01/2010 00:00:00' and '12/31/2010 23:59:59' ORDER BY TRANDATE 我试图找出为什么BETWEEN运算符在行使上面的第一个SELECT时在12/31/2010的24个周期内不包罗全部行.为什么它必要将明晰的小时数添加到SELECT语句中,犹如在第二个修改后的语句中一样,以使其拉出正确的行数? 是由于TRANDATE界说为“DATETIME”的方法? 基于这个发明,我以为我将不得不经验全部这些旧代码,由于这些BETWEEN运算符遍布这个旧体系,好像它没有正确地提取全部数据.我只想先从一些人哪里获得澄清.感谢! 办理要领日期是一个时刻点,而不是时刻跨度.’12 / 31/2010’也是一个概念.也就是说,这是十二月三十一日的半夜. 不要觉适当你选择省略时刻部门时,它被神奇地假设为“任何”.这将是“所有为零”,即半夜. 假如您想在查询中包括成天,而不必指定23:59:59(趁便说一下,excludes the last second of the day,在当天23:59:59到00:00:00之间)第二天),您可以行使严酷的不等式(>,<)来限定您不想要的第一个时刻点: WHERE TRANDATE >='12/01/2010 00:00:00' and TRANDATE < '01/01/2011' 可能通过较量投放到DATE的日期值: WHERE CAST(TRANDATE AS DATE) between '12/01/2010' and '12/31/2010' (可以将这种范例的逼迫转换放在WHERE子句中,it is sargable). (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |