在Sql server中比较日期和当前日期

时间:2015-04-14 11:43:04

标签: sql-server date

我有一张表,其中列出了一些带日期的事件。我正在尝试编写一个只返回即将发生的事件的存储过程。

我在存储过程中编写了以下查询:

SELECT     *
FROM       Events
WHERE      tDate >= (select CAST(GETDATE() as DATE))

但这并没有返回正确的结果。这也显示日期小于当前日期的结果。如何编写将返回日期等于或大于今天日期的所有事件的查询。

编辑:已在表格中输入的日期格式为yyyy / dd / mm,getdate()以yyyy / mm / dd格式返回日期。我认为这是导致问题的原因。已使用jquery日期选择器获取已输入表中的日期。解决这个问题的方法是什么?

2 个答案:

答案 0 :(得分:1)

不确定为什么还有其他选择

SELECT     *
FROM       Events
WHERE      tDate >= CAST(GETDATE() as DATE)

答案 1 :(得分:1)

您的DATE数据未正确存储在Sql Server中。当您的应用程序传递字符串'2015-09-04'并保存日期列时,它将保存为2015年9月4日而不是2015年4月9日。因此,您的查询将返回大于GETDATE()的行。< / p>

示例

DECLARE @D VARCHAR(10) = '2015-09-04'
SELECT CONVERT(VARCHAR(20),CONVERT(DATE,@D),109)

您需要修复数据,然后在应用程序中使用类似的东西在表格中保存日期时使用CONVERT样式。 CONVERT(DATE, '20150409',112)

DECLARE @D VARCHAR(10) = '20150409'
SELECT CONVERT(VARCHAR(20),CONVERT(DATE,@D,112),109)

请参阅以下主题以获取更多信息:

Impossible to store certain datetime formats in SQL Server

Cast and Convert