在sql中获取正确的日期

时间:2015-02-17 15:40:46

标签: sql sql-server date

我正在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'作为日期),但我找不到我想要的答案

4 个答案:

答案 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)

jarlh是对的,虽然我会澄清一点。每个"日期"你在2015-02-12开始午夜12点之后显示。它们实际上是时间戳。

如果您不想在过滤器中指定的日期查看任何内容,请添加一天并使用大于或等于(>=)运算符。

SELECT *
FROM table
WHERE (date >= DATEADD(d, 1, CONVERT(date, '2015/02/12')))
ORDER BY date ASC