我有一张桌子收集从我们网站提交的表格,但出于某种原因,当他们创建表格时,他们没有在表格中加上时间戳。我希望它输入记录输入的确切日期和时间。
我知道它在某处,但我似乎无法找到如何设置默认值(如在Access中,您使用getNow()
或Now()
)但我不知道在哪里把它。
答案 0 :(得分:286)
用于修改现有表中的现有列:
ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETDATE() FOR YourColumn
答案 1 :(得分:128)
这也可以通过SSMS GUI完成。
答案 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