我有一张表,其中列出了一些带日期的事件。我正在尝试编写一个只返回即将发生的事件的存储过程。
我在存储过程中编写了以下查询:
SELECT *
FROM Events
WHERE tDate >= (select CAST(GETDATE() as DATE))
但这并没有返回正确的结果。这也显示日期小于当前日期的结果。如何编写将返回日期等于或大于今天日期的所有事件的查询。
编辑:已在表格中输入的日期格式为yyyy / dd / mm,getdate()以yyyy / mm / dd格式返回日期。我认为这是导致问题的原因。已使用jquery日期选择器获取已输入表中的日期。解决这个问题的方法是什么?
答案 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)
请参阅以下主题以获取更多信息: