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

我有一个收集从我们网站提交的表单的表格,但由于某种原因,当他们创建表格时,他们没有在表格中添加时间戳。我想让它输入输入记录的确切日期和时间。

我知道它在那里的某个地方,但我似乎找不到如何设置默认值(就像在Access中,你使用getNow()Now()),但我不知道把它放在哪里。

975071 次浏览

禁止在列上设置空值,并在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

在SQL Server的该表中,指定该列的默认值为CURRENT_TIMESTAMP。 该列的数据类型可以是datetimedatetime2.

如。

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

修改现有表中的现有列:

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

创建新表时的语法是:

CREATE TABLE MyTable
(
MYTableID INT IDENTITY(1,1),


CreateDate DATETIME NOT NULL CONSTRAINT DF_MyTable_CreateDate_GETDATE DEFAULT GETDATE()
)

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

假设表名为Customer 它有4列/少或多…

你想要向表中添加一个新列,每次当有insert…然后,这一栏记录了事件发生的时间。

解决方案:

向数据类型为datetime的表中添加一个新列,设timepurchase为新列。

然后执行如下alter命令:

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

这也可以通过SSMS GUI来完成。

  1. 将表放入设计视图(在对象资源管理器中右键单击表->设计)
  2. 向表中添加一个列(如果已经存在,则单击要更新的列)
  3. 在“列属性”中,输入“默认值”或“(getdate())” 绑定字段如下图所示

Image of table in design view

明显的答案是正确的:

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

在向列中添加默认datetime值时,应始终注意时区。

例如,这个datetime值被设计用来指示当一个成员加入一个网站,而你希望它被显示回用户,GETDATE()将给你服务器时间,因此可以显示差异,如果用户在不同的地区服务器。

如果你希望处理国际用户,在某些情况下使用GETUTCDATE ()更好,它:

返回当前数据库系统时间戳为datetime值。数据库时区偏移不包括在内。该值表示当前UTC时间(协调世界时)。此值来自运行SQL Server实例的计算机的操作系统。

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

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

这也是可行的:

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

或者:

ALTER TABLE EXAMPLE ADD created datetime default GETDATE();

假设您为注册系统创建了一个数据库表。

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()为默认值。

在一个语句中添加具有默认值的列,如这个答案

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 ;

这对我很管用。我使用SQL开发与Oracle DB:

ALTER TABLE YOUR_TABLE
ADD Date_Created TIMESTAMP  DEFAULT CURRENT_TIMESTAMP NOT NULL;

在SQLPlus中,当创建一个表时,它就像as

SQL>创建表Test

 ( Test_ID number not null,
Test_Date date default sysdate not null );

SQL> insert into Test(id) values (1);

 Test_ID Test_Date
1 08-MAR-19