0

我在比较 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:我已经更正了那里的错字。(=< 到 <=)

4

1 回答 1

0

您可以将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
于 2014-12-02T05:58:06.113 回答