Add default value of datetime field in SQL Server to a timestamp
我有一个表收集从我们的网站提交的表单,但是出于某种原因,当他们创建表时,没有在表中放置时间戳。我希望它输入输入记录的确切日期和时间。
我知道它在某个地方,但我似乎找不到如何设置默认值(比如在Access中,您使用
要修改现有表中的现有列:
1 | ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETDATE() FOR YourColumn |
这也可以通过SSMS GUI完成。
。
在SQL Server的该表中,将该列的默认值指定为
例如
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
号
在向列中添加默认日期时间值时,应该始终注意时区。
例如,这个
如果您希望与国际用户打交道,在某些情况下最好使用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时间转换为请求该值的用户的区域设置/区域性。
不允许该列为空,并在
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'); |
然后你意识到你需要他们注册的时间戳。
如果此应用程序仅限于地理上本地化的区域,那么您可以将本地服务器时间与
在这样的一个语句中添加带有默认值的列。
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 |
号