sql-server - 如何在更新时更改日期时间字段?

标签 sql-server datetime triggers

是否有数据库级函数(触发器或其他函数)可用于在插入新数据时更改日期时间字段?问题是,我正在集成的服务碰巧以 GMT 发送其所有时间(在本例中是在其端收到一些信息的时间)。

我需要自动更改此设置以反射(reflect)数据库服务器所在时区的时间。例如,如果他们向我发送下午 2:34,但我在纽约,我希望将其输入到数据库中上午 9:34。这还必须考虑格林尼治标准时间和服务器所在位置之间夏令时的差异,这似乎是一场噩梦。有什么建议吗?

此外,如果有帮助的话,我正在使用 SQL Server 2005。

编辑:

让我澄清一件事。进入此列的日期每隔一段时间(5、10、15 分钟)分批检索,因此我认为唯一的方法是在收到时间后更改时间,而不是添加 TimeModified 字段或其他内容。这可行吗?

最佳答案

你可以创建

  • 插入新记录时设置的DateTime默认值

    CREATE TABLE dbo.YourTable
    ( ........,
      LastModifiedOn DATETIME 
          CONSTRAINT DF_YourTable_LastModifiedOn DEFAULT (GETDATE())
    )
    
  • AFTER UPDATE TRIGGER,每当您更新行时,都会将 DateTime 字段设置为新值

    CREATE TRIGGER trgAfterUpdate
    ON dbo.YourTable
    AFTER UPDATE 
    AS BEGIN
       UPDATE dbo.YourTable
       SET LastModifiedOn = GETDATE()
       FROM INSERTED i
       WHERE i.Table1ID = YourTable.Table1ID
    END
    

使用默认值和触发器,您的日期时间字段 LastModifiedOn 应始终保持最新状态并显示上次修改日期/时间。

马克

关于sql-server - 如何在更新时更改日期时间字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1882200/

相关文章:

sql - 您可以使用 SQL 从 JSON 数组中选择值吗?

sql - 单个 select 语句中的多个 cte,其中 ctes 可以相互引用

sql - T-SQL 行号在 N 后重新启动

python - 如何从表单输入触发器中获取流创建表单中的 'Branch files on creation' 值?

mysql - 触发器和多列主键

php - 我将 PHP 文件上传到在线文件管理器,但当我打开我的域时,我看不到它们

javascript - Moment js utc 转换未按预期工作,落后于日期对象值

java - 替代 Java.sql.time

mysql - Codeigniter 日期比较 - 大于或小于日期时间字段不起作用

mysql - 每天为特定时间段(间隔 i 小时)创建 MySql 事件计划时出错