Thursday, May 17, 2012

Get date diff in Year, Months, and Days in oracle

with t as (select to_date('30-JAN-1995') as date1
                     ,sysdate as date2 from dual)
                    
    select
      trunc((date2-date1)/365) as Years,
      trunc((trunc(date2-date1) - trunc((date2-date1)/365) * 365)/30) as Months,
      trunc((date2-date1) - ((trunc((trunc(date2-date1) - trunc((date2-date1)/365) * 365)/30) *30 ) + (trunc((date2-date1)/365) * 365))) days
   from t

Differences among Int32.Parse, Covert.ToInt32, and Int32.TryParse

Int32.Parse (string )

It converts the string representation of a number to its 32-bit signed integer equivalent.
When s is a null reference, it will throw ArgumentNullException. If s is other than integer value, it will throw FormatException.
When s represents a number less than MinValue or greater than MaxValue, it will throw OverflowException.

For example:

string n1 = "3233";
string n2 = "3233.33";
string n3 = null;
string n4 = "12340056789123456789123456789123456789123456789";

int result;
bool success;
result = Int32.Parse(n1); //-- 3233
result = Int32.Parse(n2); //-- FormatException
result = Int32.Parse(n3); //-- ArgumentNullException
result = Int32.Parse(n4); //-- OverflowException

Convert.ToInt32(string)
It converts the specified string representation of 32-bit signed integer equivalent.
This calls in turn Int32.Parse () method. When s is a null reference, it will return 0 rather than throw ArgumentNullException.
If s is other than integer value, it will throw FormatException. When s represents a number less than MinValue or greater than MaxValue,
it will throw OverflowException.

For example:

result = Convert.ToInt32(n1); //-- 3233
result = Convert.ToInt32(n2); //-- FormatException
result = Convert.ToInt32(n3); //-- 0
result = Convert.ToInt32(n4); //-- OverflowException

Int32.TryParse(string, out int)
It method converts the specified string representation of 32-bit signed integer equivalent to out variable,
and returns true if it is parsed successfully, false otherwise. This method is available in C# 2.0. When s is a null reference,
it will return 0 rather than throw ArgumentNullException. If s is other than an integer value, the out variable will have 0 rather
than FormatException. When s represents a number less than MinValue or greater than MaxValue, the out variable will have 0 rather than
OverflowException.

For example:

 success = Int32.TryParse(s1, out result); //-- success => true; result => 3233
 success = Int32.TryParse(s2, out result); //-- success => false; result => 0
 success = Int32.TryParse(s3, out result); //-- success => false; result => 0
 success = Int32.TryParse(s4, out result); //-- success => false; result => 0

Int32.TryParse is better than that of Int32.Parse and Convert.ToInt32.
Convert.ToInt32 is better than Int32.Parse.