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.
11 réponses
Pour modifier une colonne existante dans une table existante:
ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETDATE() FOR YourColumn
Cela peut également être fait via L'interface graphique SSMS.
- Mettez votre table en mode design (faites un clic droit sur la table dans l'Explorateur d'objets- > Design )
- Ajouter une colonne à la table (ou cliquez sur la colonne que vous souhaitez mettre à jour si elle existe déjà)
- dans Propriétés de colonne, entrez
(getdate())
dans valeur par défaut ou Champ de liaison comme illustré ci-dessous
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.
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
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.
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()
)
Cela fonctionne pour moi...
ALTER TABLE `accounts` ADD `user_registered` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ;
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
Cela fonctionne aussi:
CREATE TABLE Example(
...
created datetime default GETDATE()
);
Ou:
ALTER TABLE EXAMPLE ADD created datetime default GETDATE();
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
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;