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.
@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'
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')