参数化SQL,ORACLE与SQL Server与正则表达式

本文关键字:SQL Server 正则表达式 参数 ORACLE | 更新日期: 2023-09-27 18:32:21

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

使用 @p1 的 SQL

使用:p1的 ORA

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

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

下面是一些示例 SQL:

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

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

参数化SQL,ORACLE与SQL Server与正则表达式

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

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

例如:

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

以下是模式的含义:

  • (?<='W) - (?<= ... )语法声明了积极的后视。 换句话说,任何匹配项都必须在后面显示内容。 在这种情况下,它声明匹配项前面必须有一个非单词字符。
  • : - 仅匹配冒号
  • (?='w+) - (?= ... )语法声明了积极的前瞻性。 换句话说,任何匹配项都必须跟在前瞻的内容之后。 在这种情况下,它声明匹配项后必须跟一个或多个单词字符。

请参阅在线演示。

我想不出任何理由为什么参数会是输入字符串中的第一件事,但如果可能的话,将其更改为 (?<=^|'W):(?='w+) 也可以解决这种情况。

正确的正则表达式:

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