替换字符串

REPLACE STRING 子句允许在 SQL 查询的所选字符串列中进行字符串替换。

在以下说明中:
  • replacement_pair 代表以下序列 "column_name | '文字' [BY column_name | '文字']"。
  • column_spec 表示 "FOR|EXCEPT (column [, column , column ...])"
可以指定不带 column_spec 的 replacement_pair 以及一个或多个带有 column_spec 的 replacement_pair。 在这种情况下,缺省情况下,不带 column_spec 的 replacement_pair 将应用于 FOR 选项中未指定的所有列。
语法
REPLACE STRING (column_name | '文字' [BY column_name | '文字'] [FOR | EXCEPT (column_name)])
"文件名 " 中替换字符串
变量
COLUMN_NAME

SELECT * 语句中列的名称。

"文字"

字符串或字符。

第一个 column_name/'literal ' 出现相当于 REPLACE () Db2® 标量函数中的第二个自变量 search-string

第二个 column_name/'literal ' 出现相当于 REPLACE () Db2 标量函数中的第三个自变量 replace-string 。 省略此实例时,替换字符串为空字符串。

"文件名"

包含字符串替换规范的文件的名称。

缺省值
无。

选项

FOR (列名称)
此选项允许指定将应用 REPLACE STRING 子句的一个或多个字符串列。 column_name 相当于 REPLACE () Db2 标量函数中的第一个自变量 source-string
EXCEPT (列名)
此选项允许指定一个或多个不会应用 REPLACE STRING 子句的字符串列。
在 "文件名 "中
要应用于字符串的替换在外部文件中指定。

对 IN "filename" 选项指定的文件的内容

此文件中的每个字符串替换都必须在其单独的条目中指定,并且不能拆分为几行。 可以根据需要在文件中指定任意数量的条目。 每个条目都必须根据以下模型进行格式化:
seek_value:replace_value;for:column1,...,columnn
seek_value;for:column1,...,columnn
seek_value:replace_value;except:column1,...,columnn
seek_value;except:column1,...,columnn
seek_value:replace_value;
seek_value;
第一个和第二个模型用于由 FOR 选项与列名列表相关的字符串替换。 第三和第四个模型用于由 EXCEPT 选项与列名列表相关的字符串替换。 第五和第六个模型用于与任何列名列表无关的字符串替换。

# 字符可用于向文件添加注释。

一个条目必须包含一个分号字符 (';') ,以便分隔其两个不同的组件 (字符串替换,列) ,即使不需要指定列名。 字符串替换是必需的,但列名列表是可选的。 字符串替换必须包含种子值,并且可以包含可选替换值。 如果它包含替换值,那么必须使用冒号字符 (":") 将此值与种子值分隔开。 列名列表中的项必须以逗号字符 (',') 分隔。 当它被指定时,列名列表必须跟在 "for" 或 "except" 关键字和冒号字符 (":") 后面。

使用这样的外部文件是在控制文件中指定整个 REPLACE STRING 子句的替代方法。 因此,对于其中的任何条目,其两个组件 (字符串替换,列) 的含义与整个 REPLACE STRING 子句的相应两个组件的含义完全相同。

规则

未遵循以下规则时,将显示错误消息:
  • FOR 或 EXCEPT 选项只能与 "SELECT *" 配合使用。
  • REPLACE STRING 子句中只能有一个 EXCEPT 选项。
  • 当在 REPLACE STRING 子句中使用 EXCEPT 和 FOR 选项时,必须在 EXCEPT 选项中指定 FOR 选项中指定的字符串列。
  • REPLACE STRING 子句中可以有多个 FOR 选项,但指定的字符串列名只能出现一次。
  • 只允许一个不带 column_spec 的 replacement_pair。
当通过 Db2处理 SELECT 语句时,将有一条消息通知将忽略 REPLACE STRING 子句。
如果在 REPLACE STRING 子句中未指定任何选项 FOR 或 EXCEPT ,那么将对 SQL 查询中指定的所有字符串列进行字符串替换。

示例

使用 "SELECT *" SQL 查询:
[i1010@lat179(:) ~]$ db2hpu -f sysin -i i1010
INZM031I Optim High Performance Unload for Db2 06.01.00.001(121203)
         64 bits 12/03/12 (Linux lat179 3.1.9-1.4-desktop) x86_64)
INZI473I Memory limitations: 'unlimited' for virtual memory and 'unlimited' for data segment
       ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+
000001 GLOBAL CONNECT TO SAMPLE;
000002 UNLOAD TABLESPACE
000003 DB2 NO
000004 LOCK NO
000005 FLUSH BUFFERPOOLS NO
000006 SELECT * FROM EMPLOYEE;
000007 REPLACE STRING ('E' BY 'e' FOR (FIRSTNME), 'A' BY 'a' EXCEPT(FIRSTNME, JOB), 'R' BY 'r')
000008 FORMAT DEL;

INZU462I HPU control step start: 10:34:09.780.
INZU463I HPU control step end  : 10:34:09.783.
INZU464I HPU run step start    : 10:34:09.794.
"000010","CHRISTINe","I","HaaS","a00","3978","1995-01-01","PrES    ","18","F","1963-08-24","152750.00","1000.00","4220.00"
"000020","MICHAeL","L","THOMPSON","B01","3476","2003-10-10","MANAGEr ","18","M","1978-02-02","94250.00","800.00","3300.00"
"000030","SALLY","a","KWaN","C01","4738","2005-04-05","MANAGEr ","20","F","1971-05-11","98250.00","800.00","3060.00"
...
INZU410I HPU utility has unloaded 42 rows on lat179 host for I1010.EMPLOYEE in stdout.
INZU465I HPU run step end      : 10:34:09.799.
INZI441I HPU successfully ended: Real time -> 0m0.018693s
User time -> 0m0.018997s : Parent -> 0m0.018997s, Children -> 0m0.000000s
Syst time -> 0m0.015997s : Parent -> 0m0.015997s, Children -> 0m0.000000s
使用定制 SQL 查询:
[i1010@lat179(:) ~]$ db2hpu -f sysin -i i1010
INZM031I Optim High Performance Unload for Db2 06.01.00.001(121203) 
         64 bits 12/03/12 (Linux lat179 3.1.9-1.4-desktop x86_64)
INZI473I Memory limitations: 'unlimited' for virtual memory and 'unlimited' for data segment
       ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+
000001 GLOBAL CONNECT TO SAMPLE;
000002 UNLOAD TABLESPACE
000003 DB2 NO
000004 LOCK NO
000005 FLUSH BUFFERPOOLS NO
000006 SELECT EMPNO, FIRSTNME, LASTNAME FROM EMPLOYEE;
000007 REPLACE STRING ('A' BY 'a') 
000008 FORMAT DEL;

INZU462I HPU control step start: 10:37:33.573.
INZU463I HPU control step end  : 10:37:33.598.
INZU464I HPU run step start    : 10:37:33.600.
"000010","CHRISTINE","HaaS"
"000020","MICHaEL","THOMPSON"
"000030","SaLLY","KWaN"
...
INZU410I HPU utility has unloaded 42 rows on lat179 host for I1010.EMPLOYEE in stdout.
INZU465I HPU run step end      : 10:37:33.604.
INZI441I HPU successfully ended: Real time -> 0m0.030913s
User time -> 0m0.023996s : Parent -> 0m0.023996s, Children -> 0m0.000000s
Syst time -> 0m0.009998s : Parent -> 0m0.009998s, Children -> 0m0.000000s
使用 REPLACE STRING 子句来引用外部文件。 此外部文件的内容等同于以上第一个示例中 REPLACE STRING 子句的规范:
[i1111@lat117]$ db2hpu -f SYSIN52 -i i1111
INZM031I Optim High Performance Unload for Db2 06.05.00.002.05(220405)
         64 bits 04/06/2022 (Linux lat117 3.10.0-957.21.3.el7.x86_64)
INZI473I Memory limitations: 'unlimited' for virtual memory and 'unlimited' for data segment
       ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+
000001 GLOBAL CONNECT TO SAMPLE;
000002 UNLOAD TABLESPACE
000003 DB2 NO
000004 SELECT * FROM EMPLOYEE;
000005 REPLACE STRING IN "/home/i1111/Test/replace.txt"
000006 FORMAT DEL;

INZU462I HPU control step start: 04/06/2022 16:33:23.224.
INZU463I HPU control step end  : 04/06/2022 16:33:23.347.
INZU464I HPU run step start    : 04/06/2022 16:33:23.939.
"000010","CHRISTINe","I","HaaS","a00","3978",19950101,"PrES    ",18,"F",19630824,+0152750.00,+0001000.00,+0004220.00
"000020","MICHAeL","L","THOMPSON","B01","3476",20031010,"MANAGEr ",18,"M",19780202,+0094250.00,+0000800.00,+0003300.00
"000030","SALLY","a","KWaN","C01","4738",20050405,"MANAGEr ",20,"F",19710511,+0098250.00,+0000800.00,+0003060.00
...
INZU410I HPU utility has unloaded 42 rows on lat117 host for I1111.EMPLOYEE in stdout.
INZU465I HPU run step end      : 04/06/2022 16:33:23.949.
INZI441I HPU successfully ended: Real time -> 0m0.725769s
User time -> 0m0.065579s : Parent -> 0m0.065579s, Children -> 0m0.000000s
Syst time -> 0m0.023567s : Parent -> 0m0.023567s, Children -> 0m0.000000s
[i1111@lat117]$
[i1111@lat117]$ cat replace.txt
'E':'e';for:firstnme
'A':'a';except:firstnme,job
'R':'r';