Solved

# How do i calculate unix time from sql datetime

Posted on 2011-02-26
1,155 Views
I have a table of eventsthat has its timestamp for each row as data type datetime2(3) - ie. date and time with millisecond precision.  An example timestamp would be 2011-01-02 13:31:43.567.

I need to calculate the Unix timestamp in a query, given that timestamp column.  Does anyone have a simple way of doing this?  I need the same precision, ie. millisecond precision.  Unix time is calculated as a number of elapsed seconds (and milliseconds of course) since 1970-01-01 00:00:00.000 at GMT.  So, in this example, the Unix time would be 1293975103.567.

0
Question by:gnf

Author Comment

Here is what I am doing at the moment:

convert(float,DATEDIFF(second,'1969-12-31 19:00:00',[timestamp])) + convert(float,(DATEPART(MILLISECOND,[timestamp])))/1000 as time,

The reason why we have to do all these silly machinations is that datediff function returns an integer - it can't return a float, so we have to deal with milliseconds separately.

Any improvements on this?
0

LVL 18

Expert Comment

I know that this is an older post, but it may suit your needs. It goes into detail and provides examples of converting both to and from UNIX time.

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=66858
0

LVL 75

Expert Comment

Try it this way:

This is how I tested it:

``````Declare @UNIXDateColumn numeric(18, 3)
Set @UNIXDateColumn = 1293975103.567

``````
0

LVL 18

Accepted Solution

deighton earned 250 total points
your code gives an overflow in 2040 - the unix Y2K + 39 problem

DECLARE @TIMESTAMP as datetime ;
SET @TIMESTAMP = '2039-01-02 13:31:43.567';
--SET @TIMESTAMP = '2011-01-02 13:31:43.567';

--adjust for GMT??  in the test code but not the example given
--SET @TIMESTAMP = DATEADD(hour, 5, @TIMESTAMP);

DECLARE @DAYNUM as integer
DECLARE @DAYSECS as integer

SET @DAYNUM = datediff(day,cast('1970-01-01' as datetime), cast(floor(cast(@TIMESTAMP as float)) as datetime));
SET @DAYSECS = datediff(second ,cast(floor(cast(@TIMESTAMP as float)) as datetime), @TIMESTAMP);

select 24.0 * @DAYNUM * 3600.0 + @DAYSECS + datepart(ms,@TIMESTAMP)/1000.0 as UNIX;
0

## Featured Post

Creating and Managing Databases with phpMyAdmin in cPanel.
The Delta outage: 650 cancelled flights, more than 1200 delayed flights, thousands of frustrated customers, tens of millions of dollars in damages – plus untold reputational damage to one of the world’s most trusted airlines. All due to a catastroph…
Viewers will learn how to use the SELECT statement in SQL and will be exposed to the many uses the SELECT statement has.
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…