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

Add default value of datetime field in SQL Server to a timestamp

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

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


要修改现有表中的现有列:

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


这也可以通过SSMS GUI完成。

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


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

    例如

    1
    2
    3
    4
    5
    Create Table Student
    (
      Name varchar(50),
      DateOfAddmission datetime default CURRENT_TIMESTAMP
    );

    我希望它能奏效。


    标记的答案正确时:

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

    在向列中添加默认日期时间值时,应该始终注意时区。

    例如,这个datetime值是用来指示一个成员何时加入了一个网站,而您希望它显示回用户,getdate()会给您服务器时间,这样,如果用户在与服务器不同的区域设置中,可能会显示差异。

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

    Returns the current database system timestamp as a datetime value. The database time zone offset is not included. This value represents the current UTC time (Coordinated Universal Time). This value is derived from the operating system of the computer on which the instance of SQL Server is running.

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

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


    不允许该列为空,并在getdate()的列上设置默认值。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /*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


    创建新表时的语法为:

    1
    2
    3
    4
    5
    6
    CREATE TABLE MyTable
    (
        MYTableID INT IDENTITY(1,1),

        CreateDate DATETIME NOT NULL CONSTRAINT DF_MyTable_CreateDate_GETDATE DEFAULT GETDATE()
    )


    这对我有用…

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


    这也适用于:

    1
    2
    3
    4
    CREATE TABLE Example(
    ...
    created datetime default GETDATE()
    );

    或:

    1
    ALTER TABLE EXAMPLE ADD created datetime default GETDATE();

    这对我很有用。我正在将SQL Developer与Oracle数据库结合使用:

    1
    2
    ALTER TABLE YOUR_TABLE
      ADD Date_Created TIMESTAMP  DEFAULT CURRENT_TIMESTAMP NOT NULL;


    为了便于理解,我将总结上述答案:

    假设这张桌子叫顾客它有4列/更少或更多…

    您希望向表中添加一个新列,每当有插入时…然后,该列保存事件发生时间的记录。

    解决方案:

    在数据类型为datetime的表中添加一个新列,例如timepurchase是新列。

    然后运行以下alter:

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

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

    1
    2
    3
    4
    5
    6
    7
    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)
    );

    现在有几个人登记了。

    1
    2
    INSERT INTO dbo.registration_demo (name) VALUES
        ('John'),('Jane'),('Jeff');

    然后你意识到你需要他们注册的时间戳。

    如果此应用程序仅限于地理上本地化的区域,那么您可以将本地服务器时间与getdate()一起使用。否则,您应该注意Tanner对默认值的GETUTCDATE()的全球受众的考虑。

    在这样的一个语句中添加带有默认值的列。

    1
    2
    ALTER TABLE dbo.registration_demo
    ADD time_registered DATETIME DEFAULT GETUTCDATE();

    让我们找另一个注册者,看看数据是什么样子的。

    1
    2
    3
    4
    INSERT INTO dbo.registration_demo (name) VALUES
        ('Julia');

    SELECT * FROM dbo.registration_demo;

    1
    2
    3
    4
    5
    id    name    time_registered
    1     John    NULL
    2     Jane    NULL
    3     Jeff    NULL
    4     Julia   2016-06-21 14:32:57.767


    在sqlplus中,创建表时

    SQL>创建表测试

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

    SQL>插入测试(ID)值(1);

    1
    2
     Test_ID Test_Date
           1 08-MAR-19