代码改变世界

SQL Server中GETDATE转换时间时注意事项

  潇湘隐者  阅读(1530)  评论(0编辑  收藏  举报

 

在SQL Server中,有时候查询数据时,需要限定查询时间范围。此时需要对时间进行运算, 如下所示:

 

USE AdventureWorks2014;
GO
SELECT  *
FROM    HumanResources.Employee
WHERE   ModifiedDate > GETDATE() - 20;

 

 

例如,获取前一天的时间,可以用下面这样的SQL语句。

 

    SELECT GETDATE() -1, GETDATE();

 

 

至于为什么写这样的SQL,一来这样书写非常简单方便,比用DATEADD函数要简便一点,另外,就是很多时候临时查数会这样写。如果对GETDATE进行加减的时间粒度为小时或分钟,那么就要特别注意了。放上两个SQL,你仔细品一品下面两个SQL的差别

 

 

SELECT GETDATE() -1/24, GETDATE();

 

clip_image001[13]

 

 

SELECT GETDATE() -1.0/24, GETDATE();

 

 

clip_image002[13]

 

 

如果没有注意这个细节问题,就会踩一些坑。仅仅是因为SQL Server中,1/24是整数运算,计算结果为0, 必须转换为浮点数运算。虽然没有什么技术含量,但是有时候很多人不小心采坑,尤其是经常在多种类型数据库切换的人,因为像Oracle数据库又跟SQL Server不一样。如下所示

 

 

 

SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
 
Session altered.
 
SQL> select sysdate, sysdate -1/24 from dual;
 
SYSDATE             SYSDATE-1/24
------------------- -------------------
2020-03-28 11:32:27 2020-03-28 10:32:27
 
SQL> 
 
SQL> select 1/24 from dual;
 
      1/24
----------
.041666667

 

clip_image003[13]

编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
历史上的今天:
2018-03-28 [翻译]LVM中逻辑卷的最大大小限制
2016-03-28 Linux 虚拟机网络适配器从E1000改为VMXNET3
2014-03-28 SQL SERVER 2012 从Enterprise Evaluation Edtion 升级到 Standard Edtion SP1
2013-03-28 有的句子不长,却能鼓舞我们,成为我们坚持下去的动力[摘抄]
2013-03-28 MS SQL 挑战问题
点击右上角即可分享
微信分享提示