我正在sql server 2012中执行下一个查询。
select *
from table
where date > convert(date, '2015/02/12')
order by date asc
但是我得到了下一套:
2015-02-12 06:40:42.000
2015-02-12 06:45:44.000
2015-02-12 06:48:15.000
2015-02-12 07:06:28.000
2015-02-12 07:26:46.000
...
我可以通过将日期更改为“2015/02/13”来解决此问题,但我对这种行为有疑问,为什么我在指定我只需要稍后日期的时候从12月12日开始约会?我也尝试使用演员表('2015/02/12'作为日期),但我找不到我想要的答案
答案 0 :(得分:1)
因为没有时间的日期被解释为该日期午夜12点。如果您只想要在2015年2月12日之后的日期,那么请选择大于或等于2015年2月13日的所有日期(这将再次被解释为2月13日的午夜)。
select *
from table
where date >= convert(date, '2015/02/13')
order by date asc
答案 1 :(得分:1)
当我指定我只需要稍后的约会时,为什么我会从12月12日开始约会呢?
您并未指定仅需要在2月12日之后的日期。您将要求"日期"中的值的每一行。列大于' 2015-02-12'。
价值' 2015-02-12 06:40:42.000'大于2015-02-12' 2015-02-12'
答案 2 :(得分:1)
将日期2015/02/12
与您的日期时间数据进行比较时,这会隐式地将转换后的日期2015-02-12 00:00:000
,即一天开头的日期与列date
中的所有数据进行比较
但是你实际上是在比较日期时间数据,它也有一个时间部分,可以进行比较。
由于您将当天的开头(2015-02-12 00:00:000
)与其后的值(例如2015-02-12 06:40:42
)进行比较,因此会显示所有日期,因为{ {1}}在(大于)6:40 AM
之后。
试试这个:
0:00 AM
答案 3 :(得分:1)
如果您不想在过滤器中指定的日期查看任何内容,请添加一天并使用大于或等于(>=
)运算符。
SELECT *
FROM table
WHERE (date >= DATEADD(d, 1, CONVERT(date, '2015/02/12')))
ORDER BY date ASC