sql - oracle sql中用特殊字符替换HTML代码的有效方法

标签 sql regex oracle replace oracle11g

我需要用特殊字符替换 HTML 代码。 我受到 HTML 代码的影响,如所述 here

+------------------------+
+ Html code + Display    +
+-----------+------------+
+ À  +  À         +
+ à  +  à         +
+ Á  +  Á         +
+ á  +  á         +
+ È  +  È         +
+ è  +  è         +
+ É  +  É         +
+ é  +  é         +
+ Ì  +  Ì         +
+ ì  +  ì         +
+ Í  +  Í         +
+ í  +  í         +
+ Ò  +  Ò         +
+ ò  +  ò         +
+ Ó  +  Ó         +
+ ó  +  ó         +
+ Ù  +  Ù         +
+ ù  +  ù         +
+ Ú  +  Ú         +
+ ú  +  ú         +
+ «   +  «         +
+ »   +  »         +
+ €    +  €         +
+ °     +  °         +
+------------------------+

我在数据库中发现这些条目毫无意义。所以需要将它们改成原来的符号(字符)

数据设置:也可在此 SQL fiddle 中找到。

必须根据下表更新以下值

CREATE TABLE TEMP
(
  COL1  VARCHAR2(50 CHAR),
  COL2  VARCHAR2(50 CHAR),
  COL3  VARCHAR2(50 CHAR),
  COL4  VARCHAR2(10 CHAR)
);

Insert into TEMP (COL1, COL2, COL3, COL4)
 Values
   ('VIA I MAGGIO', 'GIÙ PER LA STRADA', 'TOR LUPARA', '83');
Insert into TEMP (COL1, COL3, COL4)
 Values
   ('VIA D''AZEGLIO', 'MUGGIÒ', '12');
Insert into TEMP (COL1, COL2, COL3, COL4)
 Values
   ('VIA PONTE NUOVO', 'TOSCA CAFÈ', 'VERONA', '8a');
Insert into TEMP (COL1, COL3, COL4)
 Values
   ('LOCALITÓ AGELLO', 'SAN SEVERINO MARCHE', '60');
Insert into TEMP (COL1, COL2, COL3, COL4)
 Values
   ('VIA PAPA GIOVANNI XXIII', 'LOCALITÀ PREDONDO', 'BOVEGNO', '24');
Insert into TEMP (COL1, COL2, COL3, COL4)
 Values
   ('VIA CATANIA', 'CASA DI OSPITAITÀ COLLEREALE', 'MESSINA', '26/B');
Insert into TEMP (COL1, COL2, COL3, COL4)
 Values
   ('PIAZZA DI SANTA CROCE IN GERUSALEMME', 'MINISTERO BENI E ATTIVITÀ CULTURALI', 'ROMA', '9/a');
Insert into TEMP (COL1, COL2, COL3, COL4)
 Values
   ('VIA RONCIGLIO', 'LOCALITÀ MONTECUCCO', 'GARDONE RIVIERA', '55');
Insert into TEMP (COL1, COL2, COL3, COL4)
 Values
   ('BORGO TRINITA''', 'Borgo Trinità, 58', 'BELLANTE', '58');
Insert into TEMP (COL1, COL2, COL3, COL4)
 Values
   ('10 PIAZZA S. LORENZO', 'ROVARÈ', 'S. BIAGIO DI GALLALTA', '10');
Insert into TEMP (COL1, COL3, COL4)
 Values
   ('LOCALITÀ MALCHINA', 'SISTIANA', '3');
Insert into TEMP (COL1, COL2, COL3, COL4)
 Values
   ('VIA DEI CROCIFERI', 'PRESSO AUTORITÀ ENERGIA', 'ROMA', '19');
Insert into TEMP (COL1, COL2, COL3, COL4)
 Values
   ('VIALE STAZIONE', 'FRAZIONE SAN NICOLÒ A TREBBIA', 'ROTTOFRENO', '10/B');
Insert into TEMP (COL1, COL2, COL3, COL4)
 Values
   ('VIA ADOLFO CONSOLINI', 'ALBARÈ DI COSTERMANO', 'COSTERMANO', '45 B');
COMMIT;

设置完成后我们看到的是

SELECT * FROM TEMP;


COL1                                   COL2                                        COL3                  COL4    
---------------------------------------------------------------------------------- --------------------- --------
VIA I MAGGIO                           GIÙ PER LA STRADA                    TOR LUPARA            83      
VIA D'AZEGLIO                                                                      MUGGIÒ         12      
VIA PONTE NUOVO                        TOSCA CAFÈ                           VERONA                8a      
LOCALITÓ AGELLO                                                             SAN SEVERINO MARCHE   60      
VIA PAPA GIOVANNI XXIII                LOCALITÀ PREDONDO                    BOVEGNO               24      
VIA CATANIA                            CASA DI OSPITAITÀ COLLEREALE         MESSINA               26/B    
PIAZZA DI SANTA CROCE IN GERUSALEMME   MINISTERO BENI E ATTIVITÀ CULTURALI  ROMA                  9/a     
VIA RONCIGLIO                          LOCALITÀ MONTECUCCO                  GARDONE RIVIERA       55      
BORGO TRINITA'                         Borgo Trinità, 58                    BELLANTE              58      
10 PIAZZA S. LORENZO                   ROVARÈ                               S. BIAGIO DI GALLALTA 10      
LOCALITÀ MALCHINA                                                           SISTIANA              3       
VIA DEI CROCIFERI                      PRESSO AUTORITÀ ENERGIA              ROMA                  19      
VIALE STAZIONE                         FRAZIONE SAN NICOLÒ A TREBBIA        ROTTOFRENO            10/B    
VIA ADOLFO CONSOLINI                   ALBARÈ DI COSTERMANO                 COSTERMANO            45 B    

14 rows selected.

我想看到的是

COL1                                  COL2                                COL3                      COL4      
------------------------------------- ----------------------------------- ------------------------- ----------
VIA I MAGGIO                          GIÙ PER LA STRADA                   LUPARA                    83        
VIA D'AZEGLIO                                                             MUGGIÒ                    12        
VIA PONTE NUOVO                       TOSCA CAFÈ                          VERONA                    8a        
LOCALITÓ AGELLO                                                           SAN SEVERINO MARCHE       60        
VIA PAPA GIOVANNI XXIII               LOCALITÀ PREDONDO                   BOVEGNO                   24        
VIA CATANIA                           CASA DI OSPITAITÀ COLLEREALE        MESSINA                   26/B      
PIAZZA DI SANTA CROCE IN GERUSALEMME  MINISTERO BENI E ATTIVITÀ CULTURALI ROMA                      9/a       
VIA RONCIGLIO                         LOCALITÀ MONTECUCCO                 GARDONE RIVIERA           55        
BORGO TRINITA'                        Borgo TrinitÀ, 58                   BELLANTE                  58        
10 PIAZZA S. LORENZO                  ROVARÈ                              S. BIAGIO DI GALLALTA     10        
LOCALITÀ MALCHINA                                                         SISTIANA                  3         
VIA DEI CROCIFERI                     PRESSO AUTORITÀ ENERGIA             ROMA                      19        
VIALE STAZIONE                        FRAZIONE SAN NICOLÒ A TREBBIA       ROTTOFRENO                10/B      
VIA ADOLFO CONSOLINI                  ALBARÈ DI COSTERMANO                COSTERMANO                45 B      

14 rows selected.

陷阱:

  1. À 也可以写为 À,因此所有 HTML 代码都必须不区分大小写。
  2. 多个 HTML 代码可以影响一列。所以我需要在上表中的所有 HTML 代码中搜索任何列。

到目前为止我尝试的是一个带有替换功能的简单更新

UPDATE TEMP
SET COL1 = REPLACE (COL1, 'À' , 'À');

这样下去,我会花几天时间来写脚本。因为我需要在 20 多个表中进行此修复,每个表有 40 多个列。因此期待一种更简单的方法来做到这一点。

有人可以帮助我摆脱作家的困境吗?

还有哪个是最好的替换方式,是使用字​​符还是ASCII码转换?

更新:

我到底需要什么

  1. 如何编写更新集; 'À' 或 CHR(192)

  2. 一张表的一条语句中的所有更新(可以是 CASE 语句、REGEXP_LIKE 和 REGEXP_REPLACE 组合即可)

最佳答案

您想使用UTL_I18N.unescape_reference .

如果不需要编写长脚本,请让 Oracle 为您完成这项工作。然后运行其生成的脚本:

select
   'UPDATE ' || table_name || ' SET ' || col_name || ' = UTL_I18N.unescape_reference(' || col_name || ');'
from
   all_tab_cols
where
   owner = <MY_NAME>
and 
   table_name in ('....') -- you can use this clause too: table_name like '%my_table%'

关于sql - oracle sql中用特殊字符替换HTML代码的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22398274/

相关文章:

java - 获取当月的天数

mysql - "Unknown column"连接查询中的错误旨在选择感兴趣的组中的单个行

mysql - where 子句后的两个条件

oracle - 我们可以更改分区的间隔吗?

php - 优化SQL语句: Select multiple values

regex - 你能用 grep 做所有能用egrep 做的事情吗?

regex - 地址字段验证的正则表达式

javascript - 缩写时区正则表达式

oracle - PLW-06002 使用 NULL 时无法访问代码;

oracle - 发生错误时,如何在SQLPlus中退出脚本并返回到SQLPlus提示符,而不断开或退出SQLPlus?