Comment insérer un horodatage dans Oracle?


Réponses:


135
insert
into tablename (timestamp_value)
values (TO_TIMESTAMP(:ts_val, 'YYYY-MM-DD HH24:MI:SS'));

si vous voulez que l'horodatage actuel soit inséré, alors:

insert
into tablename (timestamp_value)
values (CURRENT_TIMESTAMP);

1
Pourquoi TO_DATEau lieu de TO_TIMESTAMP?
Dave Costa

Cela n'a pas d'importance pour cette simple INSERTinstruction, mais en général, vous ne voulez pas utiliser de variables de liaison comme celle-ci. La conversion de type dans votre première instruction l'empêche d'être sensible à la liaison, ce qui limite la capacité d'Oracle à créer de bons plans. L'optimiseur peut fonctionner mieux si vous l'utilisez à la values (:ts_val)place, en supposant que: ts_val mappe directement sur un horodatage.
Jon Heller

@JonHeller Pouvez-vous montrer un exemple spécifique de la façon dont l'utilisation to_timestampentraînerait un mauvais plan d'exécution pour une instruction SQL planifiable? Je peux montrer un exemple de la façon dont ce ne serait pas le cas. Au lieu de cela, je pense que nous voulons tous éviter une contrainte de type de données inattendue qui empêche l'utilisation d'une opération de source de ligne attendue (c'est-à-dire, celle optimale).
Jeff Holt

@ jeff6times7 Voir ce Gist pour une explication de la façon dont les variables de liaison non converties peuvent surpasser les variables de liaison converties. La différence n'a probablement d'importance que si les données sont biaisées. Avec les types de liaison natifs, Oracle peut mieux comprendre les données et effectuer de meilleures estimations en fonction des valeurs.
Jon Heller

24
INSERT
INTO    mytable (timestamp_field)
VALUES  (CURRENT_TIMESTAMP)

CURRENT_TIMESTAMPet SYSTIMESTAMPsont des mots réservés à Oracle à cet effet. Ils sont l'analogue d'horodatage de SYSDATE.


19
INSERT INTO TABLE_NAME (TIMESTAMP_VALUE) VALUES (TO_TIMESTAMP('2014-07-02 06:14:00.742000000', 'YYYY-MM-DD HH24:MI:SS.FF'));

9

Cela dépend de l'origine de la valeur que vous souhaitez insérer. Si vous souhaitez insérer l'heure actuelle, vous pouvez l'utiliser CURRENT_TIMESTAMPcomme indiqué dans d'autres réponses (ou SYSTIMESTAMP).

Si vous avez une heure sous forme de chaîne et que vous souhaitez la convertir en horodatage, utilisez une expression telle que

to_timestamp(:timestamp_as_string,'MM/DD/YYYY HH24:MI:SS.FF3')

Les composants du format de l'heure sont, je l'espère, explicites, sauf que FF3 signifie 3 chiffres de précision inférieure à la seconde. Vous pouvez aller jusqu'à 6 chiffres de précision.

Si vous effectuez une insertion depuis une application, la meilleure réponse peut dépendre de la manière dont la valeur de date / heure est stockée dans votre langue. Par exemple, vous pouvez mapper certains objets Java directement sur une TIMESTAMPcolonne, mais vous devez comprendre les JDBCmappages de types.



1

Insertion de la date dans SQL

insert
into tablename (timestamp_value)
values ('dd-mm-yyyy hh-mm-ss AM');

Si nous voulons insérer la date système

insert
into tablename (timestamp_value)
values (sysdate);

0

Tout d'abord, vous devez rendre le champ Nullable, puis après cela si simple - au lieu de mettre une valeur, mettez ce code CURRENT_TIMESTAMP.


0

Pour ma propre référence future:

Avec cx_Oracle, utilisez cursor.setinputsize (...):

mycursor = connection.cursor();

mycursor.setinputsize( mytimestamp=cx_Oracle.TIMESTAMP );
params = { 'mytimestamp': timestampVar };
cusrsor.execute("INSERT INTO mytable (timestamp_field9 VALUES(:mytimestamp)", params);

Aucune conversion nécessaire dans la base de données. Voir la documentation Oracle


0

On peut simplement utiliser

INSERT INTO MY_TABLE(MY_TIMESTAMP_FIELD)
VALUES (TIMESTAMP '2019-02-15 13:22:11.871+02:00');

De cette façon, vous n'aurez pas à vous soucier de la chaîne de format de date, utilisez simplement le format d'horodatage par défaut.

Fonctionne avec Oracle 11, je ne sais pas si c'est le cas pour les versions antérieures d'Oracle.


-6
CREATE TABLE Table1 (
id int identity(1, 1) NOT NULL,
Somecolmn varchar (5),
LastChanged [timestamp] NOT NULL)

cela fonctionne pour mssql 2012

INSERT INTO Table1 VALUES('hello',DEFAULT)  
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.