Solved

First millisecond and Last millisecond in a day

Posted on 2013-01-30
11
811 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
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: 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
 

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.

Question has a verified solution.

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

Suggested Solutions

I remember the day when someone asked me to create a user for an application developement. The user should be able to create views and materialized views and, so, I used the following syntax: (CODE) This way, I guessed, I would ensure that use…
Checking the Alert Log in AWS RDS Oracle can be a pain through their user interface.  I made a script to download the Alert Log, look for errors, and email me the trace files.  In this article I'll describe what I did and share my script.
Via a live example show how to connect to RMAN, make basic configuration settings changes and then take a backup of a demo database
This video shows information on the Oracle Data Dictionary, starting with the Oracle documentation, explaining the different types of Data Dictionary views available by group and permissions as well as giving examples on how to retrieve data from th…

773 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