SQL Server中GETDATE转换时间时注意事项
- 作者: Poemfeather
- 来源: 51数据库
- 2020-08-06
在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();
SELECT GETDATE() -1.0/24, GETDATE();
如果没有注意这个细节问题,就会踩一些坑。仅仅是因为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
原文链接:http://www.cnblogs.com/kerrycode/p/12586728.html
推荐阅读
- SQLite数据库操作:原生操作,GreenDao操作讲解
- 数据库SQL实战题:获取员工其当前的薪水比其manager当前薪水还高的相关信息(教程)
- SQLSERVER查询区分大小写的写法分析
- SQL学习总结之SQL的分类介绍
- 阶梯到高级T-SQL 1级:高级T-SQL介绍交叉连接
- 高级T-SQL级别1的Stairway:使用CROSS JOIN引入高级T-SQL分析
- 什么是SQL隔离级别?四个SQL隔离级别定义介绍
- Sql递归介绍之用with实现递归查询
- SQLSERVER查询时日期格式化的实例讲解
- 数据库SQL实战:从titles表获取按照title进行分组,注意对于重复的emp_no进行忽略(题解)
热点文章
SQLite数据库操作:原生操作,GreenDao操作讲解
18
数据库SQL实战题:获取员工其当前的薪水比其manager当前薪水还高的相关信息(教程)
4
SQLSERVER查询区分大小写的写法分析
36
SQL学习总结之SQL的分类介绍
6
阶梯到高级T-SQL 1级:高级T-SQL介绍交叉连接
4
高级T-SQL级别1的Stairway:使用CROSS JOIN引入高级T-SQL分析
4
什么是SQL隔离级别?四个SQL隔离级别定义介绍
2
Sql递归介绍之用with实现递归查询
6
SQLSERVER查询时日期格式化的实例讲解
4
数据库SQL实战:从titles表获取按照title进行分组,注意对于重复的emp_no进行忽略(题解)
7