Ajouter la valeur par défaut du champ datetime dans SQL Server à un horodatage

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

Je sais qu'il est là 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.

177
demandé sur Ivar 2011-02-03 18:47:39

11 réponses

Pour modifier une colonne existante dans une table existante:

ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETDATE() FOR YourColumn
246
répondu TheQ 2011-02-03 15:56:34

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

  1. Mettez votre table en mode design (faites un clic droit sur la table dans l'Explorateur d'objets- > Design )
  2. Ajouter une colonne à la table (ou cliquez sur la colonne que vous souhaitez mettre à jour si elle existe déjà)
  3. dans Propriétés de colonne, entrez (getdate()) dans valeur par défaut ou Champ de liaison comme illustré ci-dessous

entrez la description de l'image ici

102
répondu Tony L. 2017-07-20 14:06:00

Dans cette table de 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 marchera.

67
répondu Sanjay 2017-02-10 18:38:57

Interdire les valeurs nulles 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
16
répondu Martin Smith 2018-10-02 17:19:46

Alors que la réponse marquée {[6] } est correcte avec:

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

Vous devez toujours être conscient des fuseaux horaires lors de l'ajout de valeurs datetime par défaut dans une colonne.

Disons par exemple, cette valeur datetime est conçue pour indiquer quand un membre a rejoint un site web et que vous voulez qu'il soit affiché à l'utilisateur, GETDATE() vous donnera l'heure du serveur, donc pourrait montrer des divergences si l'utilisateur est dans un environnement local différent du serveur.

Si vous prévoyez de traiter avec utilisateurs internationaux, il est préférable dans certains cas d'utiliser GETUTCDATE () , Qui:

Renvoie l'horodatage actuel du système de base de données en tant que valeur datetime. Le décalage du 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/site Web frontal doit transformez cette valeur de L'heure UTC en locale / culture de l'utilisateur qui la demande.

14
répondu Tanner 2017-05-23 12:18:20

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

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

    CreateDate DATETIME NOT NULL CONSTRAINT DF_MyTable_CreateDate_GETDATE DEFAULT GETDATE()
)
6
répondu David Sopko 2013-11-19 22:01:10

Cela fonctionne pour moi...

ALTER TABLE `accounts` ADD `user_registered` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ;
4
répondu dsixnine 2017-11-15 22:14:46

Pour le rendre plus simple à suivre, je vais résumer les réponses ci-dessus:

Disons que la table est appelé Client il a 4 colonnes / moins ou plus...

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

Solution:

Ajouter une colonne, disons - timePurchase est la nouvelle colonne à la table avec des données de type datetime.

Puis exécutez la modification suivante:

ALTER TABLE Customer ADD CONSTRAINT DF_Customer DEFAULT GETDATE() FOR timePurchase
2
répondu not_selfish 2013-06-21 19:51:02

Cela fonctionne aussi:

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

Ou:

ALTER TABLE EXAMPLE ADD created datetime default GETDATE();
2
répondu Keoma Borges 2016-03-01 13:14:20

Disons 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 quand ils se sont inscrits.

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

Ajouter le colonne avec une valeur par défaut dans un énoncé comme cette réponse.

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

Prenons un autre inscrit 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
répondu Jeff Puckett 2017-05-23 12:18:20

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;
1
répondu JavaGeek 2018-08-01 13:51:06