我有一个收集从我们网站提交的表单的表格,但由于某种原因,当他们创建表格时,他们没有在表格中添加时间戳。我想让它输入输入记录的确切日期和时间。
我知道它在那里的某个地方,但我似乎找不到如何设置默认值(就像在访问中,你使用getNow()或Now()),但我不知道把它放在哪里。
我有一个收集从我们网站提交的表单的表格,但由于某种原因,当他们创建表格时,他们没有在表格中添加时间戳。我想让它输入输入记录的确切日期和时间。
我知道它在那里的某个地方,但我似乎找不到如何设置默认值(就像在访问中,你使用getNow()或Now()),但我不知道把它放在哪里。
当前回答
为了便于理解,我总结一下上面的答案:
假设这个表名为Customer 它有4列/少或多…
你想要向表中添加一个新列,每次当有insert…然后,这一栏记录了事件发生的时间。
解决方案:
向数据类型为datetime的表中添加一个新列,假设timepurchase是新列。
然后执行如下alter命令:
ALTER TABLE Customer ADD CONSTRAINT DF_Customer DEFAULT GETDATE() FOR timePurchase
其他回答
这也是可行的:
CREATE TABLE Example(
...
created datetime default GETDATE()
);
Or:
ALTER TABLE EXAMPLE ADD created datetime default GETDATE();
而标记的答案是正确的:
为你的列添加默认的GETDATE()约束
在向列中添加默认datetime值时,应始终注意时区。
例如,这个datetime值被设计用来指示一个成员何时加入一个网站,而你希望它被显示回给用户,GETDATE()将给你服务器时间,因此可以显示差异,如果用户在不同的地区服务器。
如果你希望处理国际用户,在某些情况下最好使用GETUTCDATE(),它:
返回当前数据库系统时间戳为datetime值。数据库时区偏移不包括在内。该值表示当前UTC时间(协调世界时)。此值来自运行SQL Server实例的计算机的操作系统。
ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETUTCDATE() FOR YourColumn
在检索值时,前端应用程序/网站应该将该值从UTC时间转换为请求它的用户的地区/文化。
假设您为注册系统创建了一个数据库表。
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()来使用本地服务器时间。否则,您应该注意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名称time_registered 1约翰·NULL 2 Jane NULL 3杰夫·NULL 4 Julia 2016-06-21 14:32:57.767
禁止在列上设置空值,并在getdate()列上设置默认值
/*Deal with any existing NULLs*/
UPDATE YourTable SET created_date=GETDATE() /*Or some sentinel value
'19000101' maybe?*/
WHERE created_date IS NULL
/*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
为了便于理解,我总结一下上面的答案:
假设这个表名为Customer 它有4列/少或多…
你想要向表中添加一个新列,每次当有insert…然后,这一栏记录了事件发生的时间。
解决方案:
向数据类型为datetime的表中添加一个新列,假设timepurchase是新列。
然后执行如下alter命令:
ALTER TABLE Customer ADD CONSTRAINT DF_Customer DEFAULT GETDATE() FOR timePurchase