我想要一个 SELECT 语句,我在多列中将每个(“)替换为(\”)。现在我该怎么做?
是否可以在SELECT语句中使用REPLACE函数定位多个列?
我知道这是无效的代码,但只是想象我的意思:
SELECT REPLACE(firstColumn, anotherColumn, '"', '\"')
FROM testTable
当然不起作用,因为REPLACE函数只需要三个参数。
我真的需要帮助,因为我找不到任何对我有用的东西。
提前感谢!
[编辑 - 2012年4月24日 - 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
希望这有助于任何可能遇到类似问题的人。它可能不是最好的解决方案,但它对我有用。感谢您的快速帮助!
答案 0 :(得分:6)
我认为你唯一明智的选择就是在每一列上单独使用替换。
SELECT
REPLACE(firstColumn, '"', '\"'),
REPLACE(secondColumn, '"', '\"')
FROM testTable
您可以对数据进行一些巧妙的旋转,以便只应用REPLACE一次,但我没有看到好处。
如果您正在进行的实际替换非常复杂,那么您可以编写一个函数来保存代码混乱和重复。
答案 1 :(得分: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;
/