sql - 使用 '=<' 和 '>=' 而不是使用 'between' 比较两个日期时,精度是否有差异?

标签 sql sql-server

我正在开发一个提供报告上显示的记录的查询,并注意到以前的开发人员使用“=<”和“>=”来比较作为所述查询参数的两个日期时间。这些参数作为字符串传递,不会转换为日期时间对象。 我注意到,在查询结果中,我丢失了大约两天的数据。 我想知道使用“=<”和“>=”而不是使用“Between”比较这些日期时间时精度是否有任何差异(这可能是导致结果中数据丢失的原因)。

为了完整起见,以下是当前使用的比较的简单示例:

Declare @DateTo varchar(max) = '2013-07-29'
Declare @DateFrom varchar(max) = '2013-07-07'

SELECT * FROM Records WHERE Date =< @DateTo AND Date >= @DateFrom

最佳答案

(SQL中没有=<运算符,您指的是<=运算符。)

between运算符比较包含在内的值,因此与使用 <= 相同和>=运算符。

如果这些值只是一个日期,您可以使用类似的包含值。如果它们还包含时间成分,您应该考虑使用独占的更高限制。这样您就可以查询不同的范围而不会重叠,例如值2013-07-30 00:00:00.000不会同时包含在范围 2013-07-07 to 2013-07-30 中和2013-07-30 to 2013-08-02 。表达式Date < '2013-07-30'将包括 2013-07-29 23:59:59.999 之前的所有值但不是2013-07-30 00:00:00.000 .

示例:

Declare @DateTo varchar(max) = '2013-07-30' -- the day after the range
Declare @DateFrom varchar(max) = '2013-07-07'

SELECT * FROM Records WHERE Date < @DateTo AND Date >= @DateFrom

关于sql - 使用 '=<' 和 '>=' 而不是使用 'between' 比较两个日期时,精度是否有差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18074741/

相关文章:

sql - IF block 在条件不适用时执行

sql - 两次连接表 - 在同一个表的两个不同列上

java - Hibernate 5.2.5.Final createSQLQuery() 方法已弃用

sql - 寻找关于必须具有哪些表约束才能实现唯一性的建议

python - 数据库错误 : ('HY000' , '[HY000] [Microsoft][ODBC SQL Server Driver]Connection is busy with results for another hstmt (0) (SQLExecDirectW)' )

java - 如何使用 setString() hibernate 设置列名

c# - EF 递归层次结构

sql-server - 将 nvarchar 转换为 int 时转换失败

sql-server - SQL Server 中的备份如何进行?

sql - 选择期间不重叠的日期范围