Loic Petit <loic.pe...@gmail.com> writes:

> Hey everyone,
>
> I use derby to store monitoring data. As I wanted to see the performance of
> my service, I have created a table with multiple timestamps that corresponds
> to different points of the computing.
> In order to measure the delay I want to do a timestamp difference in
> milliseconds.

You can use the escape function timestampdiff with SQL_TSI_FRAC_SECOND:

ij> select {fn timestampdiff(SQL_TSI_FRAC_SECOND, t, CURRENT_TIMESTAMP)} as 
diff , {fn timestampdiff(SQL_TSI_SECOND, t, CURRENT_TIMESTAMP)} as diff2 from t;
DIFF                |DIFF2               
-----------------------------------------
360976000000        |360  

but resolution seems to be only milliseconds.

Thanks,
Dag

>
> I read some issues on this topic on this mailling list but I did not find
> any answer as TIMESTAMPDIFF is limited to the second's resolution.
> Actually, I just needed to convert the timestamp to a unix timestamp (as
> there exists on plenty of other dbms) and then performs the difference with
> sql. But it seems that such function does not exist.
>
> What I wrote is this :
>
> import java.sql.Timestamp;
>
> public class Util {
>     public static long unixTimestamp(Timestamp t) {
>         return t.getTime();
>     }
> }
>
> Integrate this class in the classpath, and then create the function with
>
> CREATE FUNCTION UNIX_TIMESTAMP ( T TIMESTAMP )
> RETURNS BIGINT
> PARAMETER STYLE JAVA
> NO SQL LANGUAGE JAVA
> EXTERNAL NAME 'Util.unixTimestamp'
>
> But this is not a very clean way. In my case it is not that problematic to
> integrate this class in the server but in many other applications it may be
> a problem.
> As this function seems to be really core and really easy to implement (I
> suppose that the timestamp are somewhat stored as bigints), I suggest to
> have it as a builtin function.
>
> Regards
>
> Loic Petit
> Orange Labs

Reply via email to