将SQL Server中的datetime字段的默认值添加到时间戳
我有一张收集我们网站提交的表格的表格,但是由于某种原因,当他们创build表格时,他们没有在表格中添加时间戳。 我希望它inputlogginginput的确切date和时间。
我知道它在那里,但我似乎无法find如何设置默认值(如在Access中,你使用getNow()或Now()),但我不知道该把它放在哪里。
用于修改现有表中的现有列:
ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETDATE() FOR YourColumn
这也可以通过SSMS GUI完成。
- 把你的表放在devise视图中(右键单击对象浏览器 – > devise中的表格)
- 在表中添加一列(或者如果它已经存在,点击你想更新的列)
- 在列属性中,在默认值或绑定字段中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 ;