2

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

为了完整起见,这里是当前使用的比较的一个简单示例:

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

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

1 回答 1

3

=<( SQL中没有运算符,你的意思是<=运算符。)

between运算符包含性地比较值,因此与使用and<=运算符相同>=

如果这些值只是一个日期,您可以使用这样的包含值。如果它们还包含时间组件,则应考虑使用独占上限。这样您就可以查询不同的范围而不会重叠,例如,该值2013-07-30 00:00:00.000不会同时包含在范围2013-07-07 to 2013-07-302013-07-30 to 2013-08-02. 该表达式Date < '2013-07-30'将包括不超过 的所有2013-07-29 23:59:59.9992013-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
于 2013-08-06T08:10:18.500 回答