web-dev-qa-db-fra.com

Ajouter la valeur par défaut du champ date / heure dans SQL Server à un horodatage

J'ai une table qui collecte les formulaires soumis à partir de notre site Web, mais pour une raison quelconque, lors de la création de la table, ils n'ont pas mis d'horodatage dans la table. Je veux qu'il entre la date exacte et l'heure à laquelle l'enregistrement a été entré.

Je sais que c'est quelque part, mais je n'arrive pas à trouver comment définir la valeur par défaut (comme dans Access, vous utilisez getNow() ou Now()) mais je ne sais pas où le mettre. .

233
stephmoreland

Pour modifier une colonne existante dans une table existante:

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

Cela peut également être fait via l'interface graphique SSMS.

  1. Mettez votre table en mode Création (clic droit sur la table dans l'objet Explorer -> Design )
  2. Ajouter une colonne à la table (ou cliquer sur la colonne que vous souhaitez mettre à jour si elle existe déjà)
  3. Dans Propriétés de la colonne, entrez (getdate()) dans le champ Valeur ou Liaison comme indiqué ci-dessous.

Image of table in design view

129
Tony L.

Dans cette table dans SQL Server, spécifiez la valeur par défaut de cette colonne: CURRENT_TIMESTAMP . Le type de données de cette colonne peut être datetime ou datetime2.

par exemple.

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

J'espère que ça va marcher.

80
Sanjay

Alors que le réponse marquée est correct avec:

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

Vous devez toujours être conscient des fuseaux horaires lorsque vous ajoutez des valeurs datetime par défaut dans une colonne.

Disons, par exemple, que cette valeur datetime est conçue pour indiquer quand un membre a rejoint un site Web et que vous souhaitez que celui-ci soit affiché à nouveau à l'utilisateur, GETDATE() vous donnera l'heure du serveur, ce qui pourrait indiquer des anomalies si l'utilisateur se trouve dans des paramètres régionaux différents de ceux du serveur.

Si vous envisagez de traiter avec des utilisateurs internationaux, il est parfois préférable d’utiliser GETUTCDATE () , ce qui:

Renvoie l'horodatage du système de base de données en cours sous la forme d'une valeur datetime. Le décalage de fuseau horaire de la base de données n'est pas inclus. Cette valeur représente l'heure UTC actuelle (temps universel coordonné). Cette valeur est dérivée du système d'exploitation de l'ordinateur sur lequel l'instance de SQL Server est en cours d'exécution.

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

Lors de la récupération des valeurs, l'application/le site Web frontal doit transformer cette valeur de l'heure UTC en paramètres régionaux/de la culture de l'utilisateur qui la demande.

22
Tanner

Désactiver Nulls sur la colonne et définir une valeur par défaut sur la colonne de 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
18
Martin Smith

La syntaxe pour cela lors de la création d'une nouvelle table est la suivante:

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

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

Cela fonctionne pour moi ...

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

Cela a fonctionné pour moi. J'utilise SQL Developer avec Oracle DB:

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

Cela fonctionne aussi:

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

Ou:

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

Pour simplifier, je vais résumer les réponses ci-dessus:

Disons que la table s'appelle Client elle a 4 colonnes/moins ou plus ...

vous voulez ajouter une nouvelle colonne à la table où chaque fois qu'il y a une insertion ..., cette colonne conserve un enregistrement de l'heure à laquelle l'événement s'est produit.

Solution:

ajouter une nouvelle colonne, disons timepurchase est la nouvelle colonne, à la table avec le type de données datetime.

Puis lancez l’alter suivant:

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

Supposons que vous créez une table de base de données pour un système d'enregistrement.

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

Maintenant, quelques personnes s'inscrivent.

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

Ensuite, vous réalisez que vous avez besoin d’un horodatage pour leur inscription.

Si cette application est limitée à une région géographiquement localisée, vous pouvez utiliser l'heure du serveur local avec GETDATE() . Sinon, vous devriez tenir compte de considération de Tanner pour le public global avec GETUTCDATE() pour la valeur par défaut.

Ajoutez la colonne avec une valeur par défaut dans une instruction telle que cette réponse .

ALTER TABLE dbo.registration_demo
ADD time_registered DATETIME DEFAULT GETUTCDATE();

Trouvons un autre déclarant et voyons à quoi ressemblent les données.

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

Dans SQLPlus lors de la création d’une table, c’est comme

SQL> Créer une table Test

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

SQL> insérer dans Test (id) valeurs (1);

 Test_ID Test_Date
       1 08-MAR-19
0
Osama Zafar