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

ste*_*and 243 sql-server datetime

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

我知道它在某处,但我似乎无法找到如何设置默认值(如在Access中,你使用getNow()Now())但我不知道在哪里放它.

The*_*heQ 309

要修改现有表中的现有列,请执行以下操作:

ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETDATE() FOR YourColumn
Run Code Online (Sandbox Code Playgroud)

  • 如果你想要UTC时间戳而不是本地时间,你可以使用`GETUTCDATE()`代替`GETDATE()` (5认同)
  • @TheQ-谢谢。我知道我将“ YourTable”更改为表名,但是我不了解的部分是“约束”。有什么约束,我将修改您的代码以匹配表名吗? (2认同)

Ton*_* L. 135

这也可以通过SSMS GUI完成.

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

在此输入图像描述

  • 我尝试了这个,但我得到的是 `0001-01-01T00:00:00` 而不是当前日期 (3认同)

San*_*jay 83

在SQL Server的该表中,指定该列的默认值CURRENT_TIMESTAMP.该列的数据类型可以是datetime或datetime2.

例如

Create Table Student
(
  Name varchar(50),
  DateOfAddmission datetime default CURRENT_TIMESTAMP
);
Run Code Online (Sandbox Code Playgroud)

我希望它能奏效.

  • 我注意到“CURRENT_TIMESTAMP”返回计算机本地时区的“datetime”值。应该避免这种情况。而是使用“SYSUTCDATETIME”,它返回 UTC 格式的“datetime2”。 (2认同)

Tan*_*ner 23

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

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

将默认日期时间值添加到列时,您应始终了解时区.

例如,此datetime值旨在指示成员何时加入网站并希望将其显示回用户,GETDATE()将为您提供服务器时间,以便在用户与服务器位于不同的区域设置时显示差异.

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

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

ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETUTCDATE() FOR YourColumn
Run Code Online (Sandbox Code Playgroud)

检索值时,前端应用程序/网站应将此值从UTC时间转换为请求它的用户的区域设置/文化.


Mar*_*ith 18

禁止列上的Null并在列上设置默认值 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
Run Code Online (Sandbox Code Playgroud)


Dav*_*pko 8

创建新表时的语法是:

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

    CreateDate DATETIME NOT NULL CONSTRAINT DF_MyTable_CreateDate_GETDATE DEFAULT GETDATE()
)
Run Code Online (Sandbox Code Playgroud)


小智 6

这对我有用......

ALTER TABLE [accounts] 
 ADD [user_registered] DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ;
Run Code Online (Sandbox Code Playgroud)


Keo*_*ges 5

这也有效:

CREATE TABLE Example(
...
created datetime default GETDATE()
);
Run Code Online (Sandbox Code Playgroud)

或者:

ALTER TABLE EXAMPLE ADD created datetime default GETDATE();
Run Code Online (Sandbox Code Playgroud)