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

时间:2011-02-03 15:47:40

标签: sql-server datetime

我有一张桌子收集从我们网站提交的表格,但出于某种原因,当他们创建表格时,他们没有在表格中加上时间戳。我希望它输入记录输入的确切日期和时间。

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

12 个答案:

答案 0 :(得分:286)

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

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

答案 1 :(得分:128)

这也可以通过SSMS GUI完成。

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

答案 2 :(得分:77)

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

e.g。

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

我希望它能奏效。

答案 3 :(得分:20)

虽然marked answer对于:

是正确的
  

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

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

答案 4 :(得分:17)

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

答案 5 :(得分:8)

创建新表时的语法是:

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

    CreateDate DATETIME NOT NULL CONSTRAINT DF_MyTable_CreateDate_GETDATE DEFAULT GETDATE()
)

答案 6 :(得分:5)

这对我有用......

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

答案 7 :(得分:4)

这也有效:

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

或者:

ALTER TABLE EXAMPLE ADD created datetime default GETDATE();

答案 8 :(得分:3)

这对我有用。我正在将SQL Developer与Oracle DB一起使用:

ALTER TABLE YOUR_TABLE
  ADD Date_Created TIMESTAMP  DEFAULT CURRENT_TIMESTAMP NOT NULL;

答案 9 :(得分:2)

为了更容易理解,我将总结以上答案:

假设该表名为客户 它有4列/更少或更多...

你想在每次插入时向表中添加一个新列...然后该列记录事件发生的时间。

解决方案:

添加一个新列,假设 timepurchase 是新列,数据类型为 datetime 的表格。

然后运行以下alter:

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

答案 10 :(得分:1)

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

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's consideration的全局受众留意GETUTCDATE()作为默认值。

this answer等语句中添加具有默认值的列。

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

答案 11 :(得分:0)

在SQLPlus中创建表时,它就像

SQL>创建表Test

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

SQL>插入Test(id)值(1);

 Test_ID Test_Date
       1 08-MAR-19