Solved

First millisecond and Last millisecond in a day

Posted on 2013-01-30
11
794 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 76

Assisted Solution

by:slightwv (䄆 Netminder)
slightwv (䄆 Netminder) earned 375 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
 

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 76

Assisted Solution

by:slightwv (䄆 Netminder)
slightwv (䄆 Netminder) earned 375 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
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

 

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 76

Accepted Solution

by:
slightwv (䄆 Netminder) earned 375 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 48

Assisted Solution

by:PortletPaul
PortletPaul earned 125 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

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Join & Write a Comment

Truncate is a DDL Command where as Delete is a DML Command. Both will delete data from table, but what is the difference between these below statements truncate table <table_name> ?? delete from <table_name> ?? The first command cannot be …
Have you ever had to make fundamental changes to a table in Oracle, but haven't been able to get any downtime?  I'm talking things like: * Dropping columns * Shrinking allocated space * Removing chained blocks and restoring the PCTFREE * Re-or…
This video shows syntax for various backup options while discussing how the different basic backup types work.  It explains how to take full backups, incremental level 0 backups, incremental level 1 backups in both differential and cumulative mode a…
Via a live example, show how to restore a database from backup after a simulated disk failure using RMAN.

705 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

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now