Date-Manipulation-1


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Date-Manipulation-1
# 1  
Old 10-14-2015
Date-Manipulation-1

Hallo Team

I can perform the task manually but i would like to automate this process. ok here goes. I have a perl script which runs every Wednesday every week and the name of the script is check_19.pl

This is how the script looks like :
Code:
#!/usr/bin/perl -w
#use strict;
use DBI;

# connect to the databases
my  $dbh = DBI->connect ( 'DBI:Oracle:PAXLEY.WORLD', 'PaxReporter', 'L3xLuThvoaJi', {
    PrintError => 0
    } )
    or die "Database connection could not be made: $DBI::errstr";
$dbh->{RowCacheSize}  = 16;
my $SEL = "
select /*+parallel(v,4)*/ 
  unique a.accountname, v.billing_period_segment_id, 
  accountid, callid, calldate, inserttime, ani, destination, direction
from voipcdr v, accounts a
where v.billing_period_segment_id in 
  (select current_usage_segment_id from billing_periods 
   where todate = to_date('2015-10-19', 'yyyy-mm-dd') 
  and fromdate = to_date('2015-09-20', 'yyyy-mm-dd' ))
  and acctchargeflag = 'Y'
  and v.usercode <> 'ZZZZZZ'
  and a.id = v.accountid
";
my @resultSet;
my $sth = $dbh->prepare($SEL);
$sth->execute();
while ( my @record = $sth->fetchrow_array() )
{
    push @resultSet, [ @record ];
}
$sth->finish;

### Email only if results were returned
if ( scalar @resultSet > 0 )
{
    open (OUTPUT,">check_19.csv") || die "Cant open the file";
    print OUTPUT "Accountname,BillingPeriod,AccountID,CallID,Calldate,Inserttime,Ani,Destination,Direction\n";
    foreach ( @resultSet )
    {
        my ( $Accountname,$BillingPeriod,$AccountID,$CallID,$Calldate,$Inserttime,$Ani,$Destination,$Direction ) = @{$_};
        print OUTPUT "$Accountname,$BillingPeriod,$AccountID,$CallID,$Calldate,$Inserttime,$Ani,$Destination,$Direction\n";
    }
    close(OUTPUT);
}
END {
    $dbh->disconnect if defined($dbh);
}

Now this is how i want things to happen.
On the 20th of of each month i would like the following to happen

todate = to_date('2015-10-19', 'yyyy-mm-dd') => This should be the 19th of the Current Month

fromdate = to_date('2015-09-20', 'yyyy-mm-dd' ) => This should be the 20th of the previous month.

I hope its clear. i thank you in advance.

Kind regards
Pax

Last edited by jim mcnamara; 10-14-2015 at 12:14 PM..
# 2  
Old 10-15-2015
Save the following Perl package as Period.pm inside the directory where you have your script.
Code:
#!/usr/bin/perl

package Period;
use strict;
use warnings;

use Exporter qw(import);
our @EXPORT_OK = qw(period);
use POSIX qw(strftime);

sub last_month {
    my @work_month = @_;
    --$work_month[4];
    if ($work_month[4] == -1) {
        $work_month[4] = 11;
        --$work_month[5];
    }
    return @work_month;
}

sub period {
    my @now = localtime;
    my @month_ago = last_month(@now);
    my $end_period = strftime("%Y-%m-19", @now);
    my $start_period = strftime("%Y-%m-20", @month_ago);
    return ($start_period, $end_period);
}
1;


Add the following at the top of your script:
Code:
use strict;
use warnings;
use Period qw(period);


Modify and add the following to your script:
Code:
my ($start, $end) = period;
my $SEL = "
select /*+parallel(v,4)*/ 
  unique a.accountname, v.billing_period_segment_id, 
  accountid, callid, calldate, inserttime, ani, destination, direction
from voipcdr v, accounts a
where v.billing_period_segment_id in 
  (select current_usage_segment_id from billing_periods 
   where todate = to_date($end, 'yyyy-mm-dd') 
  and fromdate = to_date($start, 'yyyy-mm-dd' ))
  and acctchargeflag = 'Y'
  and v.usercode <> 'ZZZZZZ'
  and a.id = v.accountid
";


Last edited by Aia; 10-15-2015 at 11:34 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Date manipulation

In my shell script I take date as a input parameter from command line in the format "21 Oct 2011" which would be date +'%d %b %Y' Now i need to do two things here. 1) Validate the date entered by user 2) Calculate yesterday's date from the input. So in this case it should be: "20 Oct 2011"... (9 Replies)
Discussion started by: davidtd
9 Replies

2. Shell Programming and Scripting

Date Manipulation and Comparision

Hi All, I want to generate quarter dates using awk or anything, by giving a dates as input for example : start_date=2010-01-01 end_date=2010-05-31 output should be: start_date end_date qtr 2010-01-01 2010-03-31 1 2010-04-01 2010-05-31 2 Example 2:... (1 Reply)
Discussion started by: sol_nov
1 Replies

3. Shell Programming and Scripting

Date Manipulation

I have a file with a field containing the following: "7/3/2009 7:07:12 PM","xxxx" I need to be able to split this field up into two into a different format with the time being converted into 24 hour: so that i can get the following: "20090307","19:07:12","xxxx" (8 Replies)
Discussion started by: Pablo_beezo
8 Replies

4. Shell Programming and Scripting

Date manipulation

How can i print a future time, so i get current time by date "+%H:M" but how can i say add 20 minutes to the current time and display as I have just done for current time. (1 Reply)
Discussion started by: kelseyh
1 Replies

5. Shell Programming and Scripting

Date manipulation

Hi Gurus, How to minus 15 minuets from current system time. For example if current time is " Wed Oct 14 12:12:38 BST 2009", i need "Wed Oct 14 11:57:38 BST 2009" Thanks (2 Replies)
Discussion started by: kumarmani
2 Replies

6. UNIX for Dummies Questions & Answers

Date Manipulation with files

Hi, I have a timestamp stored in a variable start_time=17-JUL-2009 03:45, I need to search a file for this time stamp line by line (where each line has a time stamp in the file) if the time stamp is greater than the start_time variable value need to grep that line for a string and if the string... (2 Replies)
Discussion started by: happyrain
2 Replies

7. Shell Programming and Scripting

date manipulation

HI, I'm comparing my file date with the system date and if both the dates are equal I'm doing some operation. I use two variables for these two dates. I use the following command in my query. if .... But here the current date $cd shows 01 and filedate $fdate shows 1. The file is created on 1 of ... (6 Replies)
Discussion started by: pstanand
6 Replies

8. Shell Programming and Scripting

Manipulation of Date in Shell

Reuirement: I have a set of files ina diectory which has the name in format "WWW-YYYYmmDD" like, WWW-20070226. for 26th FEB 2007. Now I need to write a shell script which should move the files to directory named "old" in the same directory if date attached to file is 90 days prior to today's... (1 Reply)
Discussion started by: jnanesh.b
1 Replies

9. Shell Programming and Scripting

Date Manipulation

I need to achieve the following.....I seached the forum but could not find it... This is I have in a file... "CH","TIA","10/27/2006",000590 I need the date in the third field to be attached to fileas 20061027_test.txt How do I do it. (6 Replies)
Discussion started by: mgirinath
6 Replies

10. Shell Programming and Scripting

date manipulation

I'm writing a ksh script in which I want to present the user with a choice of choosing any of the last 15 days. i.e., a list like the following: 20040510 (today) 20040509 (yesterday) 20040508 . . . 20040426 Is there an easy way to produce the date from x number of days ago other than... (3 Replies)
Discussion started by: jalburger
3 Replies
Login or Register to Ask a Question