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