【问题标题】:SQL:check whether a time column is greater than system timeSQL:检查时间列是否大于系统时间
【发布时间】:2011-04-28 15:36:36
【问题描述】:

我想知道如何检查(开始时间列)中的时间戳是否大于系统时间。如果更大,它应该将时间戳重置为 NULL

有没有办法做到这一点?

问候。

【问题讨论】:

  • 您使用的是 MySQL 还是 SQLServer?您希望将其作为查询或过程的一部分吗?你的标签里都有。
  • 我正在使用 SQLServer。而且我不确定什么是最好的选择。但是每次插入记录时都必须启动它(查询或过程)。
  • 您可能想查看触发器,一个 BEFORE INSERT 触发器...

标签: asp.net sql sql-server tsql


【解决方案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;

【讨论】:

  • 保持它没有任何问题。再见;)
  • @Marco: 这是 mySQL 还是 SQL Server?
  • @Humam Shbib:将我的帖子作为建议,如果我的新版本不起作用,请注意 SQL 触发器帖子。看here
  • @Humam Shbib:无论如何,您的帖子是关于第一部分的,而不是创建触发器。后来你在 MS-SQL 上更改了 db,但很抱歉我在 MSSQL 中不如在 MySQL 中那么好。如果您在 MSSQL 中要求更多,我的帮助可以在这里完成 :)
  • @Marco 感谢您的支持 :)
【解决方案2】:
update table set ts_field = null where ts_field > now()

这是给mysql的

【讨论】:

    【解决方案3】:
    Declare @Now datetime = GETDATE()
    
    Update tbl Set
        StartTime=NULL
    Where StartTime > @Now
    

    【讨论】:

    • 如何在每次插入记录时执行此操作
    【解决方案4】:
      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();
    

    【讨论】:

    • Pascal/Delphi 太多(或您正在使用的其他任何地方nil)? :)
    • i.id = t.id 这个是什么意思 我的表名是Product,有时间的列名叫做Ptime。你能相应地编辑代码吗?我有点困惑。问候
    • 只需将 id 替换为表的主键即可。也许是product_id?
    【解决方案5】:

    试试……

    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
    

    【讨论】:

      猜你喜欢
      • 2012-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 2016-09-30
      • 1970-01-01
      相关资源
      最近更新 更多