将SQL Server中的datetime字段的默认值添加到时间戳

我有一张收集我们网站提交的表格的表格,但是由于某种原因,当他们创build表格时,他们没有在表格中添加时间戳。 我希望它inputlogginginput的确切date和时间。

我知道它在那里,但我似乎无法find如何设置默认值(如在Access中,你使用getNow()或Now()),但我不知道该把它放在哪里。

用于修改现有表中的现有列:

ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETDATE() FOR YourColumn 

这也可以通过SSMS GUI完成。

  1. 把你的表放在devise视图中(右键单击对象浏览器 – > devise中的表格)
  2. 在表中添加一列(或者如果它已经存在,点击你想更新的列)
  3. 在列属性中,在默认值或绑定字段中input(getdate()) ,如下图所示

在这里输入图像说明

在SQL Server的表中,将该列的默认值指定为CURRENT_TIMESTAMP 。 该列的DataType可能是datetime或datetime2。

例如

 Create Table Student ( Name varchar(50), DateOfAddmission datetime default CURRENT_TIMESTAMP ); 

我希望这会起作用。

在列上不允许空值,并在getdate()的列上设置一个默认值

 /*Deal with any existing NULLs*/ UPDATE YourTable SET created_date=GETDATE() /*Or some sentinel value '19000101' maybe?*/ /*Disallow NULLs*/ ALTER TABLE YourTable ALTER COLUMN created_date DATE NOT NULL /*Add default constraint*/ ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable_created_date DEFAULT GETDATE() FOR created_date 

虽然明显的答案是正确的:

ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETDATE() FOR YourColumn

将默认date时间值添加到列时,应始终注意时区。

举个例子,这个datetime值是为了表示一个成员join一个网站的时间,并且你希望它被显示回给用户, GETDATE()会给你服务器的时间,所以如果用户处于不同的区域到服务器。

如果您希望与国际用户打交道,最好在某些情况下使用GETUTCDATE() ,其中:

将当前数据库系统时间戳作为date时间值返回。 不包括数据库时区偏移量。 此值表示当前UTC时间(协调世界时)。 此值是从运行SQL Server实例的计算机的操作系统派生而来的。

 ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETUTCDATE() FOR YourColumn 

当检索值时,前端应用程序/网站应该将此值从UTC时间转换为请求它的用户的区域/区域。

创build新表时的语法是:

 CREATE TABLE MyTable ( MYTableID INT IDENTITY(1,1), CreateDate DATETIME NOT NULL CONSTRAINT DF_MyTable_CreateDate_GETDATE DEFAULT GETDATE() ) 

为了使其更简单,我将总结以上的答案:

让我们说这个表叫做Cutomer,它有4列/更less或更多…

你想添加一个新的列到表中,每次插入时…那么这个列logging事件发生的时间。

解:

添加新的列,让我们说timePurchase是新的列,数据types为datetime的表。

然后运行以下alter:

 ALTER TABLE Customer ADD CONSTRAINT DF_Customer DEFAULT GETDATE() FOR timePurchase 

这也适用:

 CREATE TABLE Example( ... created datetime default GETDATE() ); 

要么:

 ALTER TABLE EXAMPLE ADD created datetime default GETDATE(); 

假设您为注册系统创build数据库表。

 IF OBJECT_ID('dbo.registration_demo', 'U') IS NOT NULL DROP TABLE dbo.registration_demo; CREATE TABLE dbo.registration_demo ( id INT IDENTITY PRIMARY KEY, name NVARCHAR(8) ); 

现在有一些人注册。

 INSERT INTO dbo.registration_demo (name) VALUES ('John'),('Jane'),('Jeff'); 

然后你意识到你注册时需要一个时间戳。

如果此应用仅限于地理位置区域,则可以使用本地服务器时间和GETDATE() 。 否则,您应该使用GETUTCDATE()作为默认值,将Tanner的 GETUTCDATE()放在全球观众面前。

像这个答案一样在一个语句中添加一个默认值的列。

 ALTER TABLE dbo.registration_demo ADD time_registered DATETIME DEFAULT GETUTCDATE(); 

让我们再找一个注册人,看看数据是什么样的。

 INSERT INTO dbo.registration_demo (name) VALUES ('Julia'); SELECT * FROM dbo.registration_demo; 
 id name time_registered 1 John NULL 2 Jane NULL 3 Jeff NULL 4 Julia 2016-06-21 14:32:57.767 

这适用于我…

 ALTER TABLE `accounts` ADD `user_registered` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ;