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

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

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

Ответ 1

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

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

Ответ 2

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

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

Image of table in design view

Ответ 3

В этой таблице в SQL Server укажите значение по умолчанию для этого столбца CURRENT_TIMESTAMP. Тип данных этого столбца может быть datetime или datetime2.

например,

Create Table Student
(
  Name varchar(50),
  DateOfAddmission datetime default CURRENT_TIMESTAMP
);

Ответ 4

Пока помеченный ответ правильный с:

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 в языковой стандарт/язык пользователя, запрашивающего его.

Ответ 5

Запретить Nulls в столбце и установить значение по умолчанию для столбца 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

Ответ 6

Синтаксис этого при создании новой таблицы:

CREATE TABLE MyTable
(
    MYTableID INT IDENTITY(1,1),

    CreateDate DATETIME NOT NULL CONSTRAINT DF_MyTable_CreateDate_GETDATE DEFAULT GETDATE()
)

Ответ 7

Это работает для меня...

ALTER TABLE [accounts] 
 ADD [user_registered] DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ;

Ответ 8

Это также работает:

CREATE TABLE Example(
...
created datetime default GETDATE()
);

Или:

ALTER TABLE EXAMPLE ADD created datetime default GETDATE();

Ответ 9

Это сработало для меня. Я использую SQL Developer с Oracle DB:

ALTER TABLE YOUR_TABLE
  ADD Date_Created TIMESTAMP  DEFAULT CURRENT_TIMESTAMP NOT NULL;

Ответ 10

Чтобы было проще следовать, я обобщу приведенные выше ответы:

Допустим, таблица называется Customer, она имеет 4 столбца/меньше или больше...

Вы хотите добавить новый столбец в таблицу, где каждый раз, когда происходит вставка..., этот столбец хранит запись времени, когда произошло событие.

Решение:

добавьте новый столбец, скажем, timepurchase - новый столбец, в таблицу с типом данных datetime.

Затем запустите следующее изменение:

ALTER TABLE Customer ADD CONSTRAINT DF_Customer DEFAULT GETDATE() FOR timePurchase

Ответ 11

Скажем, вы создаете таблицу базы данных для системы регистрации.

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 для глобальной аудитории 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

Ответ 12

В 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