【发布时间】: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 <= 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 <= GETDATE();
标签: c# sql-server sql-server-2008 datetime datetime-comparison