私たちのウェブサイトから提出されたフォームを集めるテーブルを持っていますが、何らかの理由で彼らがテーブルを作成したとき、彼らはテーブルにタイムスタンプを入れませんでした。レコードが入力された正確な日時を入力するようにします。
私はそれがどこかにあることを知っています、しかし私はデフォルト値を設定する方法を見つけることができないようです(Accessのように、あなたはgetNow()
またはNow()
を使います)。
既存の表の既存の列を変更する場合
ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETDATE() FOR YourColumn
SQL Serverのそのテーブルで、その列の既定値を CURRENT_TIMESTAMP
に指定します。そのカラムのデータ型は、datetimeまたはdatetime2です。
例えば.
Create Table Student
(
Name varchar(50),
DateOfAddmission datetime default CURRENT_TIMESTAMP
);
私はそれがうまくいくことを願っています。
マークされた答え は正しいですが:
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時間からそれを要求しているユーザのロケール/カルチャに変換する必要があります。
列に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
新しいテーブルを作成するときの構文は次のとおりです。
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 ;
これも動作します:
CREATE TABLE Example(
...
created datetime default GETDATE()
);
または
ALTER TABLE EXAMPLE ADD created datetime default GETDATE();
これは私のために働きました。 SQL DeveloperとOracle DBを使用しています。
ALTER TABLE YOUR_TABLE
ADD Date_Created TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL;
わかりやすくするために、上記の答えを 要約 にします。
テーブルが Customer と呼ばれるとしましょう。
挿入があるたびに新しい列をテーブルに追加します。その列には、イベントが発生した時刻の記録が保持されます。
溶液:
新しい列を追加して、 timepurchase が新しい列であるとしましょう。データ型は datetime です。
その後、次の変更を実行します。
ALTER TABLE Customer ADD CONSTRAINT DF_Customer DEFAULT GETDATE() FOR timePurchase
登録システム用のデータベーステーブルを作成するとします。
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');
次に、登録したときのタイムスタンプが必要であることに気付きます。
このアプリが地理的にローカライズされた地域に制限されている場合は、canで GETDATE()
を使用してローカルサーバー時間を使用できます。それ以外の場合は、デフォルト値に 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
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