2013-05-16 91 views
1

解析我有一個插入查詢:SQL與正則表達式

INSERT INTO EMP (ENAME,DATE,HIRE) 
VALUES 
('John',TO_DATE('03/14/2005 00:00:00', 'MM/DD/YYYY HH24:MI:SS'),'YES'); 

我想解析TO_DATE部分和用Perl替換裏面的日期。 (如'14 -mar-05' )

解析代碼是:

+90   if ($statement =~ /(.*)TO_DATE\((.*)\),(.*)/) 
    +91   { 
    +92    my $date_format; 
    +93    if($2 =~ /(.*?)(..\/..\/....)(.*)/) 
    +94    { 
    +95     my ($mon,$day,$year) = split (/\//, $2); 
    +96     foreach my $i (%month) 
    +97     { 
    +98      if ($mon eq $i) 
    +99      { 
    +100       $year =~ s/^..//; 
    +101       $date_format = "'" . "$day" . "-" . "$month{$i}" . "-" . "$year". "'"; 
    +102      } 
    +103     } 
    +104    } 
    +105    $statement =~ s/TO_DATE(.*\)?)/$date_format/; 

線沒有105代字符串的整個端。我在這裏做錯了什麼?

回答

1

你有括號錯了線105,下面應該工作:

+105    $statement =~ s/TO_DATE\(.*?\)/$date_format/;