2013-05-16 56 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/;