0

SQL Server 2008 で日時の値を比較する際に問題に直面しています。

テーブル 'Plane_Allocation_Table' から、DATETIME 型の列 'To_Date' が今日の日付と時刻 (GETDATE() を使用して取得) よりも小さい行のみを選択したいと考えています。上記のクエリが返す値に応じて、2 つのテーブルを更新します。

ただし、私が試したクエリは行を返しません。

私が書いた最後のストアド プロシージャは次のようになります。

-- 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 : 日付と時間に基づいて比較したいことに注意してください。たとえば、日時が現在「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 に答える