Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将SQL Server中datetime字段的默认值添加到时间戳_Sql Server_Datetime - Fatal编程技术网

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

Sql server 将SQL Server中datetime字段的默认值添加到时间戳,sql-server,datetime,Sql Server,Datetime,我有一个表格收集我们网站上提交的表格,但由于某种原因,当他们创建表格时,他们没有在表格中添加时间戳。我希望它输入记录输入的确切日期和时间 我知道它就在那里的某个地方,但我似乎找不到如何设置默认值(比如在Access中,您使用getNow()或Now()),但我不知道将它放在哪里。不允许在列上使用null,并在getdate()列上设置默认值。 在SQL Server中的该表中,指定该列的默认值。 该列的数据类型可以是datetime或datetime2 e、 g 要修改现有表中的现有列,请执行以

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


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

不允许在列上使用null,并在
getdate()列上设置默认值。


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

e、 g


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

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 TABLE Customer ADD CONSTRAINT DF_Customer DEFAULT GETDATE() FOR timePurchase

这也可以通过SSMS GUI完成

  • 将您的表置于设计视图中(右键单击对象资源管理器->设计中的表)
  • 向表中添加列(或单击要更新的列(如果该列已存在)
  • 在列属性中,在默认值中输入
    (getdate())
    ,或 绑定字段如下图所示
  • 当以下各项正确时:

    ALTER TABLE YourTable为YourTable列添加约束DF\u YourTable DEFAULT GETDATE()

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

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

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

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

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

    这也适用于:

    CREATE TABLE Example(
    ...
    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');
    
    然后你意识到你需要一个他们注册的时间戳

    如果此应用程序仅限于地理区域,则您可以使用本地服务器时间。否则,您应该注意默认值的全局受众

    在一条语句中添加具有默认值的列,如

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

    INSERT INTO dbo.registration_demo (name) VALUES
        ('Julia');
    
    SELECT * FROM dbo.registration_demo;
    
    这对我有用

    ALTER TABLE [accounts] 
     ADD [user_registered] DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ;
    

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

    ALTER TABLE YOUR_TABLE
      ADD Date_Created TIMESTAMP  DEFAULT CURRENT_TIMESTAMP NOT NULL;
    

    在SQLPlus中,创建表时,如下所示

    SQL>创建表测试

     ( Test_ID number not null,
       Test_Date date default sysdate not null );
    
    SQL>插入测试(id)值(1)


    @谢谢。我知道我将“YourTable”更改为我的表名,但我不理解的是约束。什么是约束条件?我会修改您的代码以匹配我的表的名称吗?@steph-
    Q
    的回答假设您正在修改一个我认为不是这种情况的现有列?有关使用此默认约束添加新列的代码,请参见我的答案。为了使列具有默认值,它需要一个“默认约束”,此命令将添加该约束。您可以随意命名约束,Management Studio通常将其命名为DF_TableName。@TheQ-太好了,我试试。你是对的,我已经有了这个字段,但我想对它应用修复,而不是创建一个新的。谢谢你的回答!如果希望使用UTC时间戳而不是本地时间,可以使用
    GETUTCDATE()
    而不是
    GETDATE()
    如何更改该时间戳以更改现有字段“created\u date”?@steph-请参阅编辑。我先前的回答认为这是一个新专栏。您需要禁止默认值为Null,这样您希望如何处理预先存在的行呢?
    default GETDATE()
    是否保证多行
    INSERT
    对于所有插入的行都具有相同的
    DATE
    ,或者是否可以对每行计算
    GETDATE
    ?类似地,对于
    SYSDATETIME()
    ,此操作失败,错误消息为“无法在[B和时间戳]之间转换”。似乎当前时间戳是二进制值,而不是日期时间。时间戳将为您提供如下输入:yyyy mm dd 00:00:00 UTC;这会使分贝变得如此之大;我想他的意思只是yyyy-mm-dd日期;它的默认值可以通过在的正常视图中单击“定义为”来设置phpmyadmin@Amine,时间戳是一个二进制值,通常使用6-8字节。字符串表示法就是一种表示法,就像数据库没有将整数存储为字符串一样。(除非您将时间放入VARCHAR列中,否则尝试的人就有麻烦了。)我注意到
    CURRENT\u TIMESTAMP
    返回计算机本地时区中的
    datetime
    值。这应该避免。相反,请使用
    SYSUTCDATETIME
    ,它返回UTC格式的
    datetime2
    。添加新列时,它在ALTER TABLE语句中同样有效
    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 ;
    
    ALTER TABLE YOUR_TABLE
      ADD Date_Created TIMESTAMP  DEFAULT CURRENT_TIMESTAMP NOT NULL;
    
     ( Test_ID number not null,
       Test_Date date default sysdate not null );
    
     Test_ID Test_Date
           1 08-MAR-19