Добавьте значение по умолчанию поля datetime в SQL Server в метку времени
у меня есть таблица, которая собирает формы, отправленные с нашего сайта, но по какой-то причине, когда они создали таблицу, они не поставили метку времени в таблице. Я хочу, чтобы он ввел точную дату и время, когда была введена запись.
Я знаю, что он где-то там, но я не могу найти, Как установить значение по умолчанию (например, в Access, вы используете getNow()
или Now()
), но я не знаю, куда ее девать.
11 ответов
для изменения существующего столбца в существующей таблице:
ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETDATE() FOR YourColumn
Это также можно сделать через графический интерфейс SSMS.
- поместите таблицу в проектное представление (щелкните правой кнопкой мыши на таблице в обозревателе объектов ->конструкция)
- добавьте столбец в таблицу (или нажмите на столбец, который вы хотите обновить, если он уже существует)
- в свойствах столбца, введите
(getdate())
на значение по умолчанию или Связывание поле, как показано ниже
в этой таблице в SQL Server, укажите значение по умолчанию для этого столбца CURRENT_TIMESTAMP
.
Тип данных этого столбца может быть datetime или datetime2.
например
Create Table Student
(
Name varchar(50),
DateOfAddmission datetime default CURRENT_TIMESTAMP
);
Я надеюсь, что это будет работать.
запретить нули в столбце и установить значение по умолчанию в столбце 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
С отмечен ответ правильно:
ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETDATE() FOR YourColumn
вы всегда должны знать о часовых поясах при добавлении значений datetime по умолчанию в столбец.
скажем, например, это datetime
значение предназначено для указания, когда участник присоединился к веб-сайту, и вы хотите, чтобы он отображался пользователю,GETDATE()
даст вам время сервера, так что может показать расхождения, если пользователь находится в другой локали к сервер.
если вы ожидаете иметь дело с международными пользователями, лучше в некоторых случаях использовать функцию getutcdate(), где:
возвращает текущую системную метку времени базы данных в качестве значения datetime. Смещение часового пояса базы данных не включено. Это значение представляет текущее время UTC (координированное универсальное время). Это значение является производным от операционной системы компьютера, на котором находится экземпляр SQL Server бегущий.
ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETUTCDATE() FOR YourColumn
при получении значений интерфейсное приложение / веб-сайт должно преобразовать это значение из времени UTC в локаль/культуру пользователя, запрашивающего его.
синтаксис для этого при создании новой таблицы:
CREATE TABLE MyTable
(
MYTableID INT IDENTITY(1,1),
CreateDate DATETIME NOT NULL CONSTRAINT DF_MyTable_CreateDate_GETDATE DEFAULT GETDATE()
)
это работает для меня...
ALTER TABLE `accounts` ADD `user_registered` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ;
чтобы было проще следовать, я буду подведем итоги ответов:
предположим, что таблица называется клиентам он имеет 4 столбца / меньше или больше...
вы хотите добавить новый столбец в таблицу, где каждый раз, когда есть insert... затем в этой колонке записывается время, когда произошло событие.
устранение:
добавить новый столбец, скажем timePurchase - Это новый столбец в таблицу с данными тип datetime.
затем запустите следующий alter:
ALTER TABLE Customer ADD CONSTRAINT DF_Customer DEFAULT GETDATE() FOR timePurchase
Это также работает:
CREATE TABLE Example(
...
created datetime default GETDATE()
);
или:
ALTER TABLE EXAMPLE ADD 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');
тогда вы понимаете, что вам нужна метка времени, когда они зарегистрировались.
если это приложение ограничено географически локализованным регионом, то вы можете используйте время локального сервера с GETDATE()
. В противном случае вы должны прислушаться Таннер рассмотрения для глобальной аудитории GETUTCDATE()
значение по умолчанию.
добавьте столбец со значением по умолчанию в один оператор, например ответ.
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
это сработало для меня. Я использую SQL Developer с Oracle DB:
ALTER TABLE YOUR_TABLE
ADD Date_Created TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL;