SQL Server에서 datetime 필드의 기본값을 타임 스탬프에 추가


265

웹 사이트에서 제출 한 양식을 수집하는 테이블이 있지만 어떤 이유로 테이블을 만들 때 타임 스탬프를 테이블에 넣지 않았습니다. 레코드가 입력 된 정확한 날짜와 시간을 입력하고 싶습니다.

나는 그것이 어딘가에 있다는 것을 알고 있지만 (Access에서, getNow()또는 사용하는 것처럼) 기본값을 설정하는 방법을 찾을 수 Now()없지만 어디에 넣을 지 모르겠습니다.


답변:


332

기존 테이블에서 기존 열을 수정하려면 다음을 수행하십시오.

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

2
@TheQ-감사합니다. "YourTable"을 테이블 이름으로 변경했지만 이해하지 못하는 부분은 제약 조건입니다. 제약 조건은 무엇이며 테이블 이름과 일치하도록 코드를 수정 하시겠습니까?
stephmoreland

@steph- TheQ의 대답은 당신이 내가 믿지 않는 기존 열을 변경한다고 가정합니다. 이 기본 제약 조건으로 새 열을 추가하는 코드에 대한 내 대답을 참조하십시오.
마틴 스미스

1
열이 기본값을 가지려면 "기본 제약 조건"이 필요하며이 명령이이를 추가합니다. 제약 조건의 이름은 원하는대로 지정할 수 있습니다. Management Studio는 일반적으로 이름을 DF_TableName으로 지정합니다.
TheQ

@TheQ-완벽합니다. 사용해 볼게요. 당신은 옳았습니다. 나는 이미 현장을 가지고 있지만 새로운 것을 만들지 않고 수정을 적용하고 싶었습니다. 모든 답변에 감사드립니다!
stephmoreland

6
대신 현지 시간의 UTC 타임 스탬프를 원하는 경우에, 당신이 사용할 수있는 GETUTCDATE()대신에GETDATE()
Cocowalla

147

이것은 SSMS GUI를 통해서도 가능합니다.

  1. 테이블을 디자인 뷰에 배치하십시오 (객체 탐색기-> 디자인 에서 테이블을 마우스 오른쪽 버튼으로 클릭하십시오 )
  2. 테이블에 열을 추가하거나 이미 존재하는 경우 업데이트하려는 열을 클릭하십시오.
  3. 열 속성에서 아래 그림과 같이 기본값 또는 바인딩 필드에 입력하십시오 (getdate()).

디자인 뷰에서 테이블 이미지


좋은 질문. dateadd(minute, 10, GetDate())그것이 작동하는지 확인 하려고 합니다.
Tony L.

SQL Server 디자인보기에서 시도했지만 값이 목록의 항목 중 하나와 일치해야합니다! 그래서 나는 뒷면에 그것을 만들었습니다
shareef

92

SQL Server의 해당 테이블에서 해당 열의 기본값을로 지정하십시오 CURRENT_TIMESTAMP. 해당 열의 데이터 유형은 datetime 또는 datetime2 일 수 있습니다.

예 :

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

1
"[B와 TIMESTAMP] 사이를 변환 할 수 없습니다"라는 오류 메시지와 함께 실패합니다. CURRENT_TIMESTAMP는 날짜 시간이 아닌 이진 값인 것 같습니다.
Sindri Traustason

TIMESTAMP는 다음과 같은 입력을 제공합니다. yyyy-mm-dd 00:00:00 UTC; DB가 너무 커질 수 있습니다. 나는 그가 날짜 yyyy-mm-dd만을 의미한다고 생각한다. phpmyadmin
Amine

@Amine, TIMESTAMP는 일반적으로 6-8 바이트를 사용하는 이진 값입니다. 문자열 표현은 데이터베이스가 정수를 문자열로 저장하지 않는 것과 같은 표현입니다. (시간을 VARCHAR 열에 넣지 않고 시도하는 사람들을 괴롭히지 않는 한)
SilverbackNet

1
컴퓨터의 현지 시간대 CURRENT_TIMESTAMPdatetime값 을 반환합니다 . 피해야합니다. 대신 UTC SYSUTCDATETIME를 반환 하는를 사용하십시오 datetime2.
Dai

28

표시된 답변 은 다음과 같이 정확 하지만 :

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 시간에서 요청한 사용자의 로캘 / 문화로 변환해야합니다.


19

열에서 널을 허용하지 않고 열의 기본값을 설정하십시오. 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

기존 필드 "created_date"를 변경하려면 어떻게 변경 하시겠습니까?
stephmoreland

@steph-편집을 참조하십시오. 내 이전 답변은 이것이 새로운 열이라고 가정했습니다. 기본값이 작동하려면 NULL을 허용하지 않아야하므로 기존 행을 어떻게 처리 하시겠습니까?
마틴 스미스

8

새 테이블을 만들 때의 구문은 다음과 같습니다.

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

    CreateDate DATETIME NOT NULL CONSTRAINT DF_MyTable_CreateDate_GETDATE DEFAULT GETDATE()
)

새 열을 추가 할 때 ALTER TABLE 문에서 동일하게 작동합니다.
Captain Sensible

7

이것은 나를 위해 작동합니다 ...

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

4

이것은 또한 작동합니다 :

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

또는:

ALTER TABLE EXAMPLE ADD created datetime default GETDATE();

4

이것은 나를 위해 일했습니다. Oracle DB에서 SQL Developer를 사용하고 있습니다.

ALTER TABLE YOUR_TABLE
  ADD Date_Created TIMESTAMP  DEFAULT CURRENT_TIMESTAMP NOT NULL;

2

더 쉽게 따라갈 수 있도록 위의 답변 을 요약 합니다.

테이블이 Customer 라고 가정 하면 4 열 / 그 이상이 있습니다.

삽입이있을 때마다 테이블에 새 열을 추가하려고합니다. 그런 다음 해당 열은 이벤트가 발생한 시간을 기록합니다.

해결책:

데이터 유형이 datetime 인 테이블에 timepurchase 가 새 열 이라고 가정 합니다 .

그런 다음 다음 변경을 실행하십시오.

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

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의 고려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

0

SQLPlus에서 테이블을 생성하는 동안

SQL> 테이블 테스트 작성

 ( Test_ID number not null,
   Test_Date date default sysdate not null );

SQL> Test (id) 값에 삽입 (1);

 Test_ID Test_Date
       1 08-MAR-19
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.