Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

First millisecond and Last millisecond in a day

Posted on 2013-01-30
11
Medium Priority
?
860 Views
Last Modified: 2013-02-05
How to get the very first millisecond and very last millisecond in a day in Oracle?

Thanks!
0
Comment
Question by:sath350163
11 Comments
 
LVL 29

Expert Comment

by:MikeOM_DBA
ID: 38837449
You could use timestamp:

SELECT TO_CHAR(SYSTIMESTAMP,'DD-MON-YYYY HH24.MI.SS.FF') FROM DUAL;

Open in new window

0
 

Author Comment

by:sath350163
ID: 38837461
Thanks for the response.

I eseentially need to retrieve records from the very first millisecond in a day (say today) until vers last millisecond of today.
Can you please tell me how that can be achieved?
0
 
LVL 78

Assisted Solution

by:slightwv (䄆 Netminder)
slightwv (䄆 Netminder) earned 1500 total points
ID: 38837482
select * from table where timestamp_column >= trunc(systimestamp) and < trunc(systimestamp+1);

You could use sysdate in place of systimestamp since trunc strips the time portion of either.
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:sath350163
ID: 38837504
Thanks.

My table stores the date time as Number which is in milliseconds.
So timestamp_column equivalent column in my schema is a NUMBER column.

Here is a sample Number value representing a Date Time: 1359651194334

select * from table where MilliSecs_Number_column >= trunc(systimestamp) and < trunc(systimestamp+1);

So,  how do I convert the MilliSecs_Number_column to DATE with Timestamp in the SELECT sql?
0
 
LVL 78

Assisted Solution

by:slightwv (䄆 Netminder)
slightwv (䄆 Netminder) earned 1500 total points
ID: 38837605
>>Here is a sample Number value representing a Date Time: 1359651194334

What date/time does that represent?

If unix epoch, there are a TON of links out there on converting these to Oracle:


For example:
http://www.experts-exchange.com/Database/Oracle/Q_27681819.html#a37861961

select * from table where TO_DATE('1970-01-01', 'YYYY-MM-DD') + MilliSecs_Number_column/ 86400000 >=
trunc(systimestamp) and TO_DATE('1970-01-01', 'YYYY-MM-DD') + MilliSecs_Number_column/ 86400000 < trunc(systimestamp+1);
0
 

Author Comment

by:sath350163
ID: 38837670
Not sure. It is being stamped by JAVA code.

On converting the Number in Milliseconds to Date, I get 1/31/2013 4:53:14 PM.
SELECT TO_DATE('01/01/1970 00:00:00','DD/MM/YYYY HH24:MI:SS') + (1359651194334  /1000/60/60/24) from dual;

Open in new window

Your approach works. Thanks.

In the mean time, I also found another approach which is essentially giving me the same result:
select * 
  from table 
 where TO_DATE('1970-01-01', 'YYYY-MM-DD') + (1359651194334  /1000/60/60/24) >= trunc(systimestamp) 
   and TO_DATE('1970-01-01', 'YYYY-MM-DD') + (1359651194334  /1000/60/60/24) < trunc(systimestamp+1);  

Open in new window

What do you think about this approach?
Thanks!
0
 
LVL 78

Accepted Solution

by:
slightwv (䄆 Netminder) earned 1500 total points
ID: 38837748
>>What do you think about this approach?

Isn't that what I posted?

1000*60*60*24 = 86400000

As for what I think:  If what is stored as a number converts to the correct date using the formula, I think it is a great idea.

You need to get with the developers to confirm what they are storing and what it resolves to.

If 1359651194334  doesn't mean 1/31/2013 4:53:14 PM, then this is a horrible idea since the conversion is wrong.

Basically you need to get from the developers or someone the date they start counting milliseconds from.  Then use that to seed the calculation.

If I was to bet money on it, I would guess unix epoch, 01/01/1970.
0
 

Author Comment

by:sath350163
ID: 38840811
Good point. I'll have to discuss with the developers on that.
0
 

Author Comment

by:sath350163
ID: 38840830
Thanks to both slighwv and MikeOM_DBA for the help.
0
 
LVL 49

Assisted Solution

by:PortletPaul
PortletPaul earned 500 total points
ID: 38848377
java does use 1st Jan 1970
http://docs.oracle.com/javase/1.4.2/docs/api/java/sql/Timestamp.html

I suggest converting the date boundaries into a number that can be directly compared to the java timestamp data in your table, like this:


select
*
from table1
where (
      /* for "yesterday" */
      table1.java_timestamp >= ((truc(sysdate-1) - to_date('1970-01-01', 'YYYY-MM-DD')) * 86400000)
       and
      table1.java_timestamp < ((truc(sysdate) - to_date('1970-01-01', 'YYYY-MM-DD')) * 86400000)
      )
   

Open in new window

0
 

Author Comment

by:sath350163
ID: 38856420
Awesome. Thanks for the findings.
0

Featured Post

Get your Disaster Recovery as a Service basics

Disaster Recovery as a Service is one go-to solution that revolutionizes DR planning. Implementing DRaaS could be an efficient process, easily accessible to non-DR experts. Learn about monitoring, testing, executing failovers and failbacks to ensure a "healthy" DR environment.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Cursors in Oracle: A cursor is used to process individual rows returned by database system for a query. In oracle every SQL statement executed by the oracle server has a private area. This area contains information about the SQL statement and the…
When it comes to protecting Oracle Database servers and systems, there are a ton of myths out there. Here are the most common.
This video shows how to copy a database user from one database to another user DBMS_METADATA.  It also shows how to copy a user's permissions and discusses password hash differences between Oracle 10g and 11g.
This video shows setup options and the basic steps and syntax for duplicating (cloning) a database from one instance to another. Examples are given for duplicating to the same machine and to different machines

783 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question