DB2 中的 datastage 转换函数的等价物是啥
Posted
技术标签:
【中文标题】DB2 中的 datastage 转换函数的等价物是啥【英文标题】:what is the equivalent of datastage convert function in DB2DB2 中的 datastage 转换函数的等价物是什么 【发布时间】:2020-04-29 13:45:06 【问题描述】:Convert 函数返回一个变量的副本,其中变量中每次出现的指定字符都替换为其他指定字符。每次要转换的字符出现在变量中时,它都会被替换字符替换。 示例:
A="NOW IS THE TIME"
PRINT A
A=CONVERT('TI','XY',A)
PRINT A
A=CONVERT('XY','T',A)
PRINT A
输出
NOW IS THE TIME
NOW YS XHE XYME
NOW S THE TME
如何在 db2 查询中实现这一点。
【问题讨论】:
【参考方案1】:TRANSLATE 是 DB2 LUW(例如 9.7)中功能齐全的等价物: https://www.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000862.html
SET A = 'NOW IS THE TIME';
--PRINT A
SET A = TRANSLATE(A, 'XY', 'TI');
--PRINT A
SET A = TRANSLATE(A, 'T', 'XY', ''); --empty padding crucial!
--PRINT A
【讨论】:
【参考方案2】:我认为相当于translate()
:
translate(A, 'XY', 'TI')
Here 是一个数据库小提琴。
这不是完全等效的。不幸的是,默认情况下,DB2 中的translate()
不会删除字符(Oracle 中的translate()
会删除字符)。相反,当“to”字符串比“from”字符串短时,DB2 会用空格或显式填充字符替换它们。只有当pad
的长度为零时,它才会删除字符。
select translate(translate('NOW IS THE TIME', 'XY', 'TI'), 'T', 'XY', '')
from sysibm.sysdummy1
【讨论】:
为什么不使用带有空填充的 TRANSLATE,适用于 LUW DB2 9.7: translate('NOW IS THE TIME', '', 'I', '') == 'NOW S THE TME' ;请参阅ibm.com/support/knowledgecenter/SSEPGG_9.7.0/…,其中:“该值的长度属性必须为零或一。如果指定了零长度字符串,则删除 from-string-exp 中的字符,而 to-string-exp 中没有相应的字符来自 char-string-exp 或 graphics-string-exp。”【参考方案3】:你可以使用replace
:
REPLACE(A, 'TI', 'XY')
【讨论】:
【参考方案4】:DB2 中的 REPLACE 函数将 source-string 中所有出现的 search-string 替换为 replace-string。如果在 source-string 中找不到 search-string,则 source-string 原样返回。 https://www.ibm.com/support/knowledgecenter/en/SSEPEK_10.0.0/sqlref/src/tpc/db2z_bif_replace.html 有用的是,DataStage 还有一个 Replace() 函数,具有相同的功能。
【讨论】:
以上是关于DB2 中的 datastage 转换函数的等价物是啥的主要内容,如果未能解决你的问题,请参考以下文章
datastage导入sequential文件到db2数据库出现乱码,是设置不正确吗
将系统日期添加到DataStage转换器,格式为“mm / dd / yyyy hh:mm:ss”