【问题标题】:SQL parsing with regex使用正则表达式进行 SQL 解析
【发布时间】:2013-05-11 10:10:07
【问题描述】:

我有一个插入查询:

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 行替换字符串的整个结尾。我在这里做错了什么?

【问题讨论】:

    标签: sql perl parsing


    【解决方案1】:

    你在第 105 行弄错了括号,以下应该可以工作:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-16
      • 2011-03-17
      • 2015-09-06
      • 2012-07-08
      • 2020-03-05
      • 1970-01-01
      • 1970-01-01
      • 2014-07-25
      相关资源
      最近更新 更多