2017-06-27 1 views
0

J'ai créé ms précision horodatages dans KDB parKDB création timestamp microseconde

update Ts: Date + Time + MSec from Table 

Maintenant, je suis en train de faire la même chose avec une précision microseconde. n semble être le type de temps de précision nanosecondes

n 8 16 00:00:00.000000000 0Nn timespan  Timespan TimeSpan 

donc j'ai essayé

select Date + "n"$Time + (1000*USec), Date, Time, USec from Table 

Mais il semble que cela traite « n » comme ayant une précision milliseconde et il ajoute (USEC * 1000) ms au lieu de ns

2017-07-01T23:59:58.000000 2017-06-23 09:10:02.000 744596 

Comment puis-je faire ce travail. J'ai également essayé de convertir en 'p' mais cela génère une erreur de type

Répondre

2

KDB évalue de droite à gauche. Ainsi, dans votre exemple, il ajoute 1000 * Usec à Time comme première opération, ce qui se traduit par une valeur traitée en millisecondes plutôt qu'en nanosecondes. Si vous déplacez le (1000 * USec) à gauche du temps d'incantation sur une période de temps, il ajoutera des nanosecondes à la place.

q)show Table: ([]Date: .z.D - 1 0; Time: "t"$2?23:59:59; MSec: 2?1000; USec: 2?1000) 
Date  Time   MSec USec 
--------------------------------- 
2017.06.26 16:04:52.000 652 635 
2017.06.27 13:33:25.000 66 108 
q)update ts: Date + (1000*USec) + "n"$Time + MSec from Table 
Date  Time   MSec USec ts 
--------------------------------------------------------------- 
2017.06.26 16:04:52.000 652 635 2017.06.26D16:04:52.652635000 
2017.06.27 13:33:25.000 66 108 2017.06.27D13:33:25.066108000 
+0

Ah, je vois, donc, la fonte de t à n est arrivé après l'addition. Réarrangement en effet fixé le problème. Merci – chrise