【问题标题】:Comparing datetime values in SQL server 2008比较 SQL Server 2008 中的日期时间值
【发布时间】:2014-12-02 05:24:20
【问题描述】:

我在比较 SQL Server 2008 中的日期时间值时面临挑战。

我只想从表“Plane_Allocation_Table”中选择那些 DATETIME 类型的列“To_Date”小于今天的日期和时间(我使用 GETDATE() 获得的)。并根据上述查询返回的值更新两个表。

但是,我尝试的查询没有返回任何行。

我写的最后一个存储过程看起来像:

-- 更新 Hanger_Details 中 Total_Allocation 的过程和 Plane_Allocation_Details 中预订的有效性:

CREATE PROCEDURE [dbo].[Update_Total_Allocation_APMS]
AS
DECLARE @now DATETIME
SELECT @now = GETDATE()
UPDATE Hanger_Details
SET Total_Allocation = Total_Allocation - 1
WHERE Hanger_Number IN
(
    SELECT Hanger_Number
    FROM Plane_Allocation_Details
    WHERE To_Date <= @now AND Validity = 'Valid'
)
UPDATE Plane_Allocation_Details
SET Validity = 'Not Valid'
WHERE To_Date <= @now

“To_Date”和“@now”的比较不起作用。有什么解决方案可以比较存储过程中表中的日期时间值吗?

PS:请注意,我想根据日期和时间进行比较。例如,如果现在时间 datetime 为 '2014-12-20 10:00:00.000',列值为 '2014-12-20 09:59:00.000',则必须返回该行。

Edit1:我已经更正了那里的错字。 (=

【问题讨论】:

  • 除了可能的拼写错误。我认为你做得很好。您想再次检查其他所有内容吗?也许再检查一下 To_Date 的类型?
  • To_Date的数据类型是什么
  • 如果您可以发布一个简单的 CREATE-INSERT-SELECT 脚本来演示您的问题,这将有所帮助。例如CREATE TABLE #1 (To_Date datetime); INSERT #1 VALUES ('2014-12-20 10:00'); SELECT * FROM #1 WHERE To_Date &lt;= GETDATE();
  • @AnthonyFaull :您发布的内容正是我的问题。选择语句不起作用。
  • 一个简单的示例脚本:CREATE TABLE sample_table (To_Date datetime); INSERT INTO sample_table VALUES ('2014-12-20 10:00:00.000'); SELECT * FROM sample_table WHERE To_Date &lt;= GETDATE();

标签: c# sql-server sql-server-2008 datetime datetime-comparison


【解决方案1】:

您可以将 datetime 值强制转换为 date-only 值。

例如

DECLARE @today date
SELECT @today = CONVERT(date, GETDATE())

UPDATE Plane_Allocation_Details
SET Validity = 'Not Valid'
WHERE CONVERT(date, To_Date) <= @today

【讨论】:

  • 谢谢,这行得通。但是,我实际上也需要基于当前时间进行比较。
猜你喜欢
  • 2011-03-19
  • 1970-01-01
  • 1970-01-01
  • 2016-09-19
  • 2018-07-29
  • 1970-01-01
  • 2012-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多