Добавьте значение по умолчанию поля datetime в SQL Server в метку времени

у меня есть таблица, которая собирает формы, отправленные с нашего сайта, но по какой-то причине, когда они создали таблицу, они не поставили метку времени в таблице. Я хочу, чтобы он ввел точную дату и время, когда была введена запись.

Я знаю, что он где-то там, но я не могу найти, Как установить значение по умолчанию (например, в Access, вы используете getNow() или Now()), но я не знаю, куда ее девать.

11 ответов


для изменения существующего столбца в существующей таблице:

ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETDATE() FOR YourColumn

Это также можно сделать через графический интерфейс SSMS.

  1. поместите таблицу в проектное представление (щелкните правой кнопкой мыши на таблице в обозревателе объектов ->конструкция)
  2. добавьте столбец в таблицу (или нажмите на столбец, который вы хотите обновить, если он уже существует)
  3. в свойствах столбца, введите (getdate()) на значение по умолчанию или Связывание поле, как показано ниже

enter image description here


в этой таблице в 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;