【问题标题】:Regular expression for database naming数据库命名的正则表达式
【发布时间】:2015-02-04 16:30:37
【问题描述】:

我需要从文本文件中执行数千个查询。

请看下面我的一种查询:

SELECT * 
    FROM T1 A 
    INNER JOIN DB2.dbo.CI_T1 B ON A.id= B.id 
    LEFT OUTER JOIN T3 C ON B.id = C.id
    WHERE ...

有些表的名字很好(database.owner.table_name),有些则没有(table_name)。

如何使用正则表达式更新每个查询以将 table_name 的不合格实例替换为 database.owner.table_name

我写 fiddle 来测试它:http://www.phpliveregex.com/p/9SHhttp://www.phpliveregex.com/p/9SF

【问题讨论】:

  • 你有什么问题?
  • 您使用什么语言进行替换?这些表都有别名吗?如果没有,在ON 子句中进行这种替换将非常困难。
  • @MichaelBerkowski 我正在使用 PHP
  • @RC。我只是强调它

标签: php sql regex


【解决方案1】:

如果是我,我不会尝试使用正则表达式。虽然对于您提供的简单 SELECT 来说它是微不足道的(尽管您似乎遇到了一些困难),但很快您就会发现 how difficult 它是使用简单的正则表达式解析编程语言。

我会以SQL parser 开头。

【讨论】:

    【解决方案2】:

    最后我使用preg_replace函数的以下正则表达式:

    $regex = '#(FROM)\s+((?!\.)[[:alnum:]_]+)\s+(\w*)\s*(INNER|LEFT|WHERE|\))#i';
    $regex2 = '#(JOIN)\s+((?!\.)[[:alnum:]_]+)\s+(\w*)\s*(ON)#i';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-11
      • 2014-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多