【问题标题】:Parameterized SQL, ORACLE vs SQL Server with regular expression带正则表达式的参数化 SQL、ORACLE 与 SQL Server
【发布时间】:2016-05-05 22:03:20
【问题描述】:

Oracle 和 Sql 服务器对参数化字符串中的参数使用不同的前缀。

Sql 使用@p1

ORA 使用:p1

我只想在我的 SQL 中使用 @,如果使用 ORA 数据库,所有 : 字符都应替换为 @

你能帮我创建正则表达式吗?

这里是一些示例 SQL:

update test_table set text = :p1 where text = 'jana:klara' or some_value = :value or info = 'two'

可以在here找到类似的问题和替代解决方案。

【问题讨论】:

    标签: c# sql sql-server regex oracle


    【解决方案1】:

    您可以使用此模式进行搜索:

    (?<=\W):(?=\w+)
    

    例如:

    string output = Regex.Replace(input, @"(?<=\W):(?=\w+)", "@");
    

    这是模式的含义:

    • (?&lt;=\W) - (?&lt;= ... ) 语法声明了积极的后视。换句话说,任何匹配都必须在后视的内容之前。在这种情况下,它声明匹配必须以非单词字符开头。
    • : - 只匹配冒号
    • (?=\w+) - (?= ... ) 语法声明了积极的前瞻。换句话说,任何匹配都必须跟前瞻的内容。在这种情况下,它声明匹配必须后跟一个或多个单词字符。

    请参阅online demo

    我想不出为什么参数会成为输入字符串中的第一个参数,但如果可能的话,将其更改为 (?&lt;=^|\W):(?=\w+) 也可以解决这种情况。

    【讨论】:

    • 我发现替换这个 UPDATE B_BSET SET VALUE_DATE = '14.07.2011' WHERE BATCH_NAME = ':BWAG_ALM2' 不能正常工作。 :BWAG_ALM2 更改为@BWAG_ALM2。有什么想法吗?
    • 这个:(?=(?:'[^']*'|[^'\n])*$) 怎么样?我认为这工作正常。
    【解决方案2】:

    正确的正则表达式:

     statement = Regex.Replace(statement, @":(?=(?:'[^']*'|[^'\n])*$)", "@");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-22
      • 1970-01-01
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      • 1970-01-01
      • 2013-12-20
      • 2019-06-10
      相关资源
      最近更新 更多