4

我想做一个SELECT语句,在其中将每个 (") 替换为多个列中的 (\") 。现在我该怎么做?

是否可以在 SELECT 语句中使用 REPLACE 函数定位多个列?

我知道这是无效代码,但只是为了形象化我的意思:

SELECT REPLACE(firstColumn, anotherColumn, '"', '\"') 
FROM testTable

这当然行不通,因为 REPLACE 函数只需要三个参数

我真的需要帮助,因为我找不到任何对我有用的东西。

提前致谢!

[编辑 - 24.04.2012 - 16:20 UTC+01:00]

对于那些可能有类似问题的人,这是我的解决方案:我使用正则表达式来构建我的SELECT REPLACE语句,如下所示:

Regex: {(^[^, ]+,)}|( {[^, ]+,})|( {[^, ]+$})

为了使用它,您需要使用逗号和空格分隔的所有列,如下所示:

ID, Gender, Firstname, Lastname, Street, Zip, City, EMail, Age,

然后你需要一个工具(在我的情况下是 Visual Studio),它能够用标记表达式(在正则表达式中的 {} 括号之间)替换,并将其替换为如下内容:

REPLACE(\1\2\3 'replaceMe', 'withMe') AS \1\2\3

希望这可以帮助任何可能有类似问题的人。这可能不是最好的解决方案,但它对我有用。感谢您的快速帮助!

4

2 回答 2

6

我认为您唯一明智的选择是在每一列上单独使用替换。

SELECT
    REPLACE(firstColumn, '"', '\"'),
    REPLACE(secondColumn, '"', '\"')
FROM testTable

您可以对数据进行一些巧妙的旋转,以便仅应用 REPLACE 一次,但我没有看到好处。

如果您正在执行的实际替换非常复杂,那么您可以编写一个函数来执行它以节省代码混乱和重复。

于 2012-04-24T09:19:55.207 回答
0

看起来它可能比您想要做的更多,但类似以下的东西应该可以工作:

declare 
  qrystart varchar2(15) := 'select replace(';
  qryend varchar2(31) := ', ''"'', ''\"'') from <your_table_name>';
  columnname varchar2(20);
begin 
  for columnItem in (
    select column_name from all_tab_columns
    where lower(table_name) = '<your_table_name>')
  loop
  columnname := columnitem.column_name;
    execute immediate qrystart || columnname || qryend;
  end loop;
end;
/
于 2013-10-24T21:40:59.957 回答