Bonjour,
Ma question est la suivante:
Peut on se baser sur la colonne timestamp d'une table afin de ne récupérer que les lignes qui ont été modifiées ou crées à partir d'une date donnée ?
Si oui comment faire ?
Merci d'avance
Version imprimable
Bonjour,
Ma question est la suivante:
Peut on se baser sur la colonne timestamp d'une table afin de ne récupérer que les lignes qui ont été modifiées ou crées à partir d'une date donnée ?
Si oui comment faire ?
Merci d'avance
Salut !
Peux tu donner plus de précisions sur cette colonne "timestamp" s'il te plait.
Hello,
j'ai des tables qui ont été crée avec une colonne de type timestamp.
Lorsque des insert sont fait sur cette table, ce champs est mis à jour automatiquement par rapport à la date du systeme je suppose ? (de meme lors des update)
Je ne sais pas comment l'utiliser, apparemment c'est different d'un datetime...
Si quelqu'un peux m'expliquer à quoi correspond ce type?
Merci
Apparemment tu ne peux pas l'utilser en la comparant à une date car elle ne contient aucune information de date/heure:
extrait du manuel de référence PDF "Vol1 élément syntaxique":
Contrairement au type de données timestamp standard de SQL, le
type timestamp de Transact-SQL ne contient pas d’information sur la
date et l’heure. Il contient des données de type binaire, comme
celle-ci :
timestamp
------------------
0x0001000000000e51
:cry:
Oki merci SQL972 pour la réponse.
Si je comprend bien il est donc possible de les comparer entre eux mais pas avec des datetimes...
:? Dommage... si quelqu'un a une idée sur un moyen de comparer un Timestanp à une date , je suis preneur :)
Merci
Tu pourrais créer une colonne de type Datetime qui serait mise à jour par un trigger...
bonjour
c'est possible d'utiliser la close where sur le champs timestamp pour recupérer les lignes à partir de la date
etant donné que timestamp regroupe l'heure et la date, tu utilise la fonction left sur le champs timestamp parce ce que je crois que tu tu connais les dates sur lesquelles tu feras le tri
exp
select * from compte_client where left(ccl_timestamp,10)='2006-02-06'
merci
Euh... je crois qu'il doit y avoir confusion.
Un champs "timestamp" dans Sybase ASE n'a aucune relation avec la date ou l'heure. C'est un champ binaire de 8 octets dont la valeur est mise à jour automatiquement chaque fois que l'enregistrement est modifié. Il n'est donc pas possible d'extraire la date à partir du timestamp.
Le choix du nom de ce datatype est évidemment particulièrement malheureux... cela fait depuis 1989 que j'utilise Sybase, et depuis 1991 que je suis actif sur le net et j'ai l'impression que cette discussion est répétée au moins une fois par mois :-)
Michael
bonjour
notre ami jeffk n'a pas precisé la version de sybase qu'il utiliseCitation:
Envoyé par mpeppler
mais si ce champ est binaire il faut alors faise un cast en datetime et ensuite il faire la requete
mais toute fois je suis surpris d'apprendre que ds ASE le champs timestamp est binaire
mais je suis moi depuis longtemp ds ASA il est de type datetime
merci
Comme je l'ai mentionné dans mon précédent message, dans ASE le champ timestamp n'a aucune relation avec la date ou l'heure:
MichaelCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 [26] PEPM.testdb.1> select @@version; --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Adaptive Server Enterprise/12.5.4/EBF 13388/P/Linux Intel/Enterprise Linux/ase1254/2006/32-bit/OPT/Fri May 19 23:17:01 2006 (1 row affected) [27] PEPM.testdb.1> create table tstamp(id int, t timestamp); [29] PEPM.testdb.1> insert tstamp(id) values(1); (1 row affected) [30] PEPM.testdb.1> select * from tstamp; id t ----------- -------------------- 1 0x00000000004122a3 (1 row affected) [31] PEPM.testdb.1> select getdate(), convert(datetime, t) from tstamp; ------------------- ------------------- Jul 10 2006 10:11AM Jan 1 1900 5:36PM (1 row affected)
bonjour jeffk
pour mieux vous aider pouvez vous nous dire si vous utiliser ASE ou ASA
et ton champ est bien de type timestamp?
mpeppler merci pour le scrip. en executant le même scrip sous ASA nous avons le même resultat. mais le champ t est de type timestamp format special avec 4 octes
alors je pense que pour repondre à notre ami il est possible de comparer un Timestanp à une date
merciCode:
1
2
3
4
5
6 insert tstamp(id) values(1); select * from tstamp; select getdate(), convert(datetime, t) from tstamp; select * from tstamp where left(t,10)='2006-07-10'
D'après le sujet il s'agit d'ASE.
Michael
ok si notre ami est sur ASE ça devrait marché car je me suis mi sur son context ça marche chez moi
jeffk essai
merci
Bon, je vais quand même réitérer ce que j'ai dis plus haut...
Il n'y a aucune relation entre le champs "timestamp" et la date/heure courante.
Bien sure qu'on peut comparer les champs en faisant des convert(), mais cela ne fait pas vraiment de sens puisque la conversion vers une date du champ timestamp donne une date complétement aléatoire!
Michael
Bonjour,
en fait c'est plus compliqué et plus simple que cela. D'après mes recheres un timestamp est relatif au dataserveur. Son zéro correspond au premier démarage du dataserveur. Il est donc possible de les comparer entre données du même serveur, mais pas avec des timestamps du dataserveur d'a côté.
Maintenant le côté pratique : stocker un timestamp
Utilise une colonne de type binary(8)
Pour trouver les données insérées, modifiées depuis ton dernier passage :
il faut avoir conservé le timestamp de ce moment-là et le comparer aux timestamps présents dans ta table.