2011-04-28 62 views
1

我想知道如何檢查的(開始時間列)時間戳是否比系統時間的大於。如果更大,它應該時間戳重置爲NULLSQL:檢查時間列是否比系統時間

有沒有辦法做到這一點?

問候。

+2

您使用的是MySQL還是SQLServer?你想把它作爲查詢或過程的一部分嗎?你已經在你的標籤中獲得了一切。 – FrustratedWithFormsDesigner 2011-04-28 15:39:23

+0

我正在使用SQLServer。我不確定什麼是最好的選擇。但是每次插入記錄時都必須啓動它(查詢或程序)。 – HShbib 2011-04-28 15:44:29

+0

你可能想看看觸發器,一個BEFORE INSERT觸發器... – FrustratedWithFormsDesigner 2011-04-28 15:47:40

回答

1

在MySQL中,你可以嘗試:

UPDATE table SET time = NULL 
WHERE time>NOW() 

如果你希望它是汽車,試試這個:

CREATE TRIGGER upd BEFORE INSERT ON `table` 
FOR EACH ROW BEGIN 
    IF NEW.time>NOW() THEN SET NEW.time=NULL; END IF; 
END; 
+0

保持它沒有任何問題再見;?) – 2011-04-28 15:42:38

+0

試了一下它給語法錯誤,謝謝。 – HShbib 2011-04-28 16:04:25

+0

@Humam Shbib:編輯並嘗試過。它現在可以工作。 – Marco 2011-04-28 16:46:17

1
update table set ts_field = null where ts_field > now() 

這是MySQL

+0

哇,13" 相同的答案你要我刪除我的 – Marco 2011-04-28 15:41:57

1
Declare @Now datetime = GETDATE() 

Update tbl Set 
    StartTime=NULL 
Where StartTime > @Now 
+0

我怎樣才能使這個執行每次記錄解決您的問題插入 – HShbib 2011-04-28 15:47:55

+1

@Humam Shbib:創建一個觸發器......你看我的後期編輯 – Marco 2011-04-28 15:52:53

1
create trigger tbl_reset_date 
    on tbl 
    after insert 
    as 

    update t 
    set time = null 
    from tbl t 
    join inserted i 
    on i.id = t.id 
    where i.time > getdate(); 
+0

太多帕斯卡爾/德爾福(或其他任何地方使用的是'nil')? :) – 2011-04-28 17:29:10

+0

哈哈 - 實際上是紅寶石。現在修復;) – 2011-04-28 18:16:23

+0

你是什麼意思,由此對i.id = t.id我的表名稱是產品和具有時間的列名稱稱爲Ptime。你能編輯相應的代碼嗎?我有點困惑。問候 – HShbib 2011-04-28 19:01:33

0

試試...

CREATE TRIGGER tr_Product_InsteadOfTrigger 
ON Product 
INSTEAD OF INSERT 
AS 

    IF @@ROWCOUNT > 0 -- limit nested recursion if no work to do 
    BEGIN 

    SET NOCOUNT ON; 

    INSERT INTO Product 
    (
     ProductId, 
     PTime 
    ) 
    SELECT 
     i.ProductId, 
     CASE 
     WHEN i.PTime > GETUTCDATE() 
     THEN NULL 
     ELSE i.PTime 
     END 
    FROM 
     inserted i 

    END -- if work to do 

GO 
相關問題