t-sql BETWEEN子句

时间:2010-08-12 01:59:49

标签: sql sql-server tsql

有谁知道BETWEEN条款的范围比较?如果我有一个datetime数据类型,BETWEEN子句是否比较到小时/分钟/秒级别?

4 个答案:

答案 0 :(得分:5)

是的,如果它相同(下降到millasecond)那么它是有效的并且将断言为true。所以将会显示

答案 1 :(得分:4)

此:

WHERE datetime_column BETWEEN '2010-08-11' AND '2010-08-12'

相当于

WHERE (datetime_column >= '2010-08-11 00:00:00.000' AND datetime_column <= '2010-08-12 00:00:00.000')

这里有两点需要注意:

  1. 这是无处不在您使用的是日期时间类型。即使您未指定,所有日期时间值都包括准确且精确到约3或4毫秒的时间部分。输入像'2010-08-11'这样的文字并不意味着你要整整一天检查。
  2. 两端都包含范围 - 你也保留了最后一天的第一个瞬间,因此IMO在日期时间类型之间使用它通常不是一个好主意。如果您的列只存储时间值为零的日期,那么这尤其糟糕,因为您可能会包含超出预期的额外一天。

答案 2 :(得分:2)

这取决于数据类型。如果BETWEEN的值大于或等于TRUE的值且小于或等于{{1}的值,则test_expression会返回begin_expression }(Source)。

以下内容:

end_expression

相当于:

BETWEEN date_field '2010-01-01 12:00:00' AND '2010-02-01 12:00:00'

答案 3 :(得分:1)

val BETWEEN @lowVal AND @highVal与说@lowVal <= val AND val <= @highVal完全相同,所以是的...日期时间比较包括日期的所有部分。 See here.