转换字符串
TRANSLATE STRING 子句允许在 SQL 查询的所选字符串列中进行字符串替换。
- replacement_pair 代表以下序列 "column_name | '文字' [BY column_name | '文字']"。
- column_spec 表示 "FOR|EXCEPT (column [, column , column ...])"
- 语法
- TRANSLATE STRING (UPPER | column_name | '文字' BY column_name | '文字' [PAD WITH column_name | 'char'] [FOR | EXCEPT (column_name)])
- 变量
- COLUMN_NAME
SELECT * 语句中列的名称。
- 缺省值
- 无。
选项
- 大写
- 此选项允许指定必须将字符转换为大写。
- PAD 带有 column_name/'char '
- 这相当于 TRANSLATE () Db2 标量函数中的第四个自变量 pad-char-exp 。 它是一个表达式,用于指定要用作字符替换的缺省字符。
- FOR (列名称)
- 这些词典是可选的。 此选项允许指定必须应用 TRANSLATE STRING 子句的一个或多个字符串列。 这相当于 TRANSLATE () Db2 标量函数中的第一个自变量 string-exp 。 它是一个表达式,用于指定必须对其应用字符替换的字符串。
- EXCEPT (列名)
- 这些词典是可选的。 此选项允许指定不得应用 TRANSLATE STRING 子句的一个或多个字符串列。
- 在 "文件名 "中
- 要应用于字符串的替换在外部文件中指定。
对 IN "filename" 选项指定的文件的内容
seek_value:replace_value:pad_value;for:column1,...,columnn
seek_value:replace_value;for:column1,...,columnn
seek_value:replace_value:pad_value;except:column1,...,columnn
seek_value:replace_value;except:column1,...,columnn
seek_value:replace_value:pad_value;
seek_value:replace_value;第一个和第二个模型用于由 FOR 选项与列名列表相关的字符串替换。 第三和第四个模型用于通过 EXCEPT 选项与列名列表相关的字符串替换。 第五和第六个模型用于与任何列名列表无关的字符串替换。# 字符可用于向文件添加注释。
一个条目必须包含一个分号字符 (';') ,以便分隔其两个不同的组件 (字符串替换,列) ,即使不需要指定列名。 字符串替换是必需的,但列名列表是可选的。 字符串替换必须包含种子值和用冒号字符 (":") 分隔的替换值,并且可以包含可选的填充值。 如果它包含填充值,那么必须使用冒号字符 (":") 将此值与替换值分隔开。 列名列表中的项必须以逗号字符 (',') 分隔。 当它被指定时,列名列表必须跟在 "for" 或 "except" 关键字和冒号字符 (":") 后面。
使用此类外部文件是在控制文件中指定整个 TRANSLATE STRING 子句 (除了其 UPPER 选项外) 的替代方法。 因此,对于其中的任何条目,其两个组件 (字符串替换,列) 的含义与整个 TRANSLATE STRING 子句的相应两个组件的含义完全相同。
规则
FOR 或 EXCEPT 选项只能与 "SELECT *" 配合使用。
当在 TRANSLATE STRING 子句中使用 EXCEPT 和 FOR 选项时,必须在 EXCEPT 选项中指定 FOR 选项中指定的字符串列。
在 TRANSLATE STRING 子句中只能有一个 EXCEPT 选项。
TRANSLATE STRING 子句中可以有多个 FOR 选项。 而在各个 FOR 选项中指定的字符串列名只能在给定的 FOR 选项中出现一次,也只能在所有 FOR 选项中出现一次。
在 TRANSLATE STRING 子句中未指定 FOR 或 EXCEPT 选项时,将对 SQL 查询中指定的所有字符串列进行字符替换。
只允许一个不带任何 FOR 或 EXCEPT 选项的字符替换。
- 如果在 TRANSLATE STRING 子句中指定了不带任何 FOR 或 EXCEPT 选项的字符替换规范,那么此字符替换将应用于有问题的字符串列。
- 如果未在 TRANSLATE STRING 子句中指定任何不带任何 EXCEPT 或 FOR 选项的字符替换,那么不会将任何字符替换应用于所讨论的字符串列。
通过 Db2处理 SELECT 语句时,将忽略 TRANSLATE STRING 子句。
示例
[i1111@lat117 Test]$ db2hpu -f sysin -i i1111
INZM031I Optim High Performance Unload for Db2 06.05.00.002.01(210726)
64 bits 07/27/2021 (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----+
000001 GLOBAL CONNECT TO SAMPLE;
000002 UNLOAD TABLESPACE
000003 DB2 NO
000004 LOCK NO
000005 FLUSH BUFFERPOOLS NO
000006 SELECT * FROM EMPLOYEE;
000007 TRANSLATE STRING ('EA' BY 'ea' FOR (FIRSTNME), 'TN' BY 'tn' EXCEPT (FIRSTNME, JOB), 'MG' BY 'mg')
000008 FORMAT DEL;
INZU462I HPU control step start: 07/27/2021 17:37:34.819.
INZU463I HPU control step end : 07/27/2021 17:37:35.104.
INZU464I HPU run step start : 07/27/2021 17:37:35.246.
"000020","MICHaeL","L","tHOMPSOn","B01","3476",20031010,"mANAgER ",18,"M",19780202,+0094250.00,+0000800.00,+0003300.00
"000060","IRVING","F","StERn","D11","6423",20030914,"mANAgER ",16,"M",19750707,+0072250.00,+0000500.00,+0002580.00
"000090","eILeeN","W","HEnDERSOn","E11","5498",20000815,"mANAgER ",16,"F",19710515,+0089750.00,+0000600.00,+0002380.00
…
INZU410I HPU utility has unloaded 42 rows on lat117 host for I1111.EMPLOYEE in stdout.
INZU465I HPU run step end : 07/27/2021 17:37:35.262.
INZI441I HPU successfully ended: Real time -> 0m0.443222s
User time -> 0m0.178133s : Parent -> 0m0.178133s, Children -> 0m0.000000s
Syst time -> 0m0.066422s : Parent -> 0m0.066422s, Children -> 0m0.000000s[i1111@lat117 Test]$ db2hpu -f sysin -i i1111
INZM031I Optim High Performance Unload for Db2 06.05.00.002.01(210726)
64 bits 07/27/2021 (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----+
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 TRANSLATE STRING ('EA' BY 'ea')
000008 FORMAT DEL;
INZU462I HPU control step start: 07/27/2021 17:45:51.253.
INZU463I HPU control step end : 07/27/2021 17:45:51.619.
INZU464I HPU run step start : 07/27/2021 17:45:52.371.
"000020","MICHaeL","THOMPSON"
"000060","IRVING","STeRN"
"000090","eILeeN","HeNDeRSON"
…
INZU410I HPU utility has unloaded 42 rows on lat117 host for I1111.EMPLOYEE in stdout.
INZU465I HPU run step end : 07/27/2021 17:45:52.385.
INZI441I HPU successfully ended: Real time -> 0m1.131917s
User time -> 0m0.176899s : Parent -> 0m0.176899s, Children -> 0m0.000000s
Syst time -> 0m0.064598s : Parent -> 0m0.064598s, Children -> 0m0.000000s[i1111@lat117 Test]$ db2hpu -f SYSIN53 -i i1111
INZM031I Optim High Performance Unload for Db2 06.05.00.002.05(220413)
64 bits 04/15/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----+
000001 GLOBAL CONNECT TO SAMPLE;
000002 UNLOAD TABLESPACE
000003 DB2 NO
000004 LOCK NO
000005 FLUSH BUFFERPOOLS NO
000006 SELECT * FROM EMPLOYEE;
000007 TRANSLATE STRING IN "/home/i1111/Test/translate.txt"
000008 FORMAT DEL;
INZU462I HPU control step start: 04/15/2022 16:49:55.676.
INZU463I HPU control step end : 04/15/2022 16:49:55.803.
INZU464I HPU run step start : 04/15/2022 16:49:56.391.
"000020","MICHaeL","L","tHOMPSOn","B01","3476",20031010,"mANAgER ",18,"M",19780202,+0094250.00,+0000800.00,+0003300.00
"000060","IRVING","F","StERn","D11","6423",20030914,"mANAgER ",16,"M",19750707,+0072250.00,+0000500.00,+0002580.00
"000090","eILeeN","W","HEnDERSOn","E11","5498",20000815,"mANAgER ",16,"F",19710515,+0089750.00,+0000600.00,+0002380.00
…
INZU410I HPU utility has unloaded 42 rows on lat117 host for I1111.EMPLOYEE in stdout.
INZU465I HPU run step end : 04/15/2022 16:49:56.402.
INZI441I HPU successfully ended: Real time -> 0m0.725356s
User time -> 0m0.063835s : Parent -> 0m0.063835s, Children -> 0m0.000000s
Syst time -> 0m0.026162s : Parent -> 0m0.026162s, Children -> 0m0.000000s
[i1111@lat117 Test]$
[i1111@lat117 Test]$ cat translate.txt
'EA':'ea';for:firstnme
'TN':'tn';except:firstnme,job
'MG':'mg';