web-dev-qa-db-ja.com

SQL Serverのdatetimeフィールドのデフォルト値をタイムスタンプに追加する

私たちのウェブサイトから提出されたフォームを集めるテーブルを持っていますが、何らかの理由で彼らがテーブルを作成したとき、彼らはテーブルにタイムスタンプを入れませんでした。レコードが入力された正確な日時を入力するようにします。

私はそれがどこかにあることを知っています、しかし私はデフォルト値を設定する方法を見つけることができないようです(Accessのように、あなたはgetNow()またはNow()を使います)。

220
stephmoreland

既存の表の既存の列を変更する場合

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

これはまたSSMS GUIを通してすることができます。

  1. テーブルをデザインビューにします(オブジェクトエクスプローラでテーブルを右クリック - > デザイン )。
  2. テーブルに列を追加します(または、既に存在する場合は更新したい列をクリックします)。
  3. [列のプロパティ]で、下の図のように デフォルト値またはバインド フィールドに(getdate())を入力

Image of table in design view

127
Tony L.

SQL Serverのそのテーブルで、その列の既定値を CURRENT_TIMESTAMP に指定します。そのカラムのデータ型は、datetimeまたはdatetime2です。

例えば.

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

私はそれがうまくいくことを願っています。

77
Sanjay

マークされた答え は正しいですが:

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

デフォルトの日時値を列に追加するときは、常にタイムゾーンに注意する必要があります。

たとえば、このdatetime値は、メンバーがWebサイトに参加したときにそれをユーザーに表示したい場合に表示するように設計されています。GETDATE()はサーバーの時間を表示します。サーバ。

あなたが国際的なユーザを扱うことを期待しているなら、それは GETUTCDATE() を使うことがより良い場合があります:

現在のデータベースシステムのタイムスタンプを日時値として返します。データベースのタイムゾーンオフセットは含まれません。この値は、現在のUTC時刻(協定世界時)を表します。この値は、SQL Serverのインスタンスが実行されているコンピューターのオペレーティングシステムから派生します。

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

値を取得するとき、フロントエンドアプリケーション/ Webサイトはこの値をUTC時間からそれを要求しているユーザのロケール/カルチャに変換する必要があります。

20
Tanner

列にNULLを許可せず、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
17
Martin Smith

新しいテーブルを作成するときの構文は次のとおりです。

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

    CreateDate DATETIME NOT NULL CONSTRAINT DF_MyTable_CreateDate_GETDATE DEFAULT GETDATE()
)
8
David Sopko

これは私のために働きます...

ALTER TABLE `accounts` ADD `user_registered` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ;
5
dsixnine

これも動作します:

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

または

ALTER TABLE EXAMPLE ADD created datetime default GETDATE();
4
Keoma Borges

これは私のために働きました。 SQL DeveloperとOracle DBを使用しています。

ALTER TABLE YOUR_TABLE
  ADD Date_Created TIMESTAMP  DEFAULT CURRENT_TIMESTAMP NOT NULL;
3
JavaGeek

わかりやすくするために、上記の答えを 要約 にします。

テーブルが Customer と呼ばれるとしましょう。

挿入があるたびに新しい列をテーブルに追加します。その列には、イベントが発生した時刻の記録が保持されます。

溶液:

新しい列を追加して、 timepurchase が新しい列であるとしましょう。データ型は datetime です。

その後、次の変更を実行します。

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

登録システム用のデータベーステーブルを作成するとします。

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)
);

現在、2人が登録しています。

INSERT INTO dbo.registration_demo (name) VALUES
    ('John'),('Jane'),('Jeff');

次に、登録したときのタイムスタンプが必要であることに気付きます。

このアプリが地理的にローカライズされた地域に制限されている場合は、canGETDATE() を使用してローカルサーバー時間を使用できます。それ以外の場合は、デフォルト値に GETUTCDATE() を使用して、グローバルな対象者に Tannerの考慮事項 に注意する必要があります。

this answer のような1つのステートメントにデフォルト値を含む列を追加します。

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
1
Jeff Puckett

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
0
Osama Zafar