web-dev-qa-db-fra.com

Instruction de sélection d'horodatage DB2

J'essaie d'exécuter une requête simple qui me permet d'obtenir des données basées sur l'horodatage, comme suit:

SELECT * 
FROM <table_name> 
WHERE id = 1 
AND usagetime = timestamp('2012-09-03 08:03:06') 
WITH UR;

Cela ne semble pas me renvoyer un enregistrement, alors que cet enregistrement est présent dans la base de données pour id = 1.

Qu'est-ce que je fais mal ici?

Le type de données de la colonne usagetime est correct, défini sur timestamp.

7
Vivek

@bhamby est correct. En laissant les microsecondes hors de la valeur de votre horodatage, votre requête ne correspondrait qu'à l'heure d'hiver du 2012-09-03 08: 03: 06.000000

Si vous n'avez pas capturé la valeur d'horodatage complète d'une requête précédente, vous pouvez spécifier un prédicat à distance qui correspondra à n'importe quelle valeur en microsecondes pour cette heure:

...WHERE id = 1 AND usagetime BETWEEN '2012-09-03 08:03:06' AND '2012-09-03 08:03:07'

ou 

...WHERE id = 1 AND usagetime >= '2012-09-03 08:03:06' 
   AND usagetime < '2012-09-03 08:03:07'
20
Fred Sobotka

Vous voudrez peut-être utiliser la fonction TRUNC sur votre colonne lors de la comparaison avec le format de chaîne afin de ne comparer que jusqu'à secondes, pas millisecondes.

SELECT * FROM <table_name> WHERE id = 1 
AND TRUNC(usagetime, 'SS') = '2012-09-03 08:03:06';

Si vous souhaitez tronquer des minutes, des heures, etc., cela est également possible, utilisez simplement la notation appropriée à la place de 'SS':

hour ('HH'), minute('MI'), year('YEAR' or 'YYYY'), month('MONTH' or 'MM'), Day ('DD')
0
JavaTec