Fra*_* R. 5 informix parsing ssis etl
Informix 12.10
tblItems
(
Type SMALLINT, {Precious Metal = 1, Other = 2}
Description VARCHAR,
Quantity SMALLINT,
Name VARCHAR,
Weight DECIMAL(5,1),
Purity SMALLINT,
Brand VARCHAR,
Model VARCHAR,
SerialNum VARCHAR
);
Run Code Online (Sandbox Code Playgroud)
编辑更新:以下示例数据存储在tblItems.Type和tblItems.Description中.请注意,Description列中的内容都是大写字符,也可能包含标点字符.
2|1LAPTOP APPLE 15.5" MODEL MACKBOOK PRO,S/N W80461WCAGX, WITH CHARGER||||||||
1|1RING 2.3PW 14K||||||||
2|DRILL RIOBY, MODEL D5521 S/N77720||||||||
2|TRIMMER TORO, MODEL 0242 S/N 66759||||||||
2|CELL SAMSUNG NOTE3, MODEL SM-N900T S/N RV8F90YLZ9W||||||||
Run Code Online (Sandbox Code Playgroud)
我需要使用注释中提到的规则将示例项描述解析为下面的列:
Quantity, {if description string does not start with a number, then Quantity = 1}
Name, {Always the first element if description has no quantity, second element if quantity present]
Weight, {Always before "PW" if Type = 1, Default to zero if Type = 2}
Purity, {Always before "K" if Type = 1, Default to NULL if Type = 2}
Brand, {Always the second element in description, if present}
Model, {Always after "MODEL", with or without a space}
Serial Number {Always after "S/N", with or without a space}
Run Code Online (Sandbox Code Playgroud)
我想用UPDATE语句来做这件事,但如果Informix有一个像SQL-Server的SSIS这样的导入实用工具,那么这可能是一个更好的选择.
更新,预期结果:
Quantity 1 1 1 1 1
Name LAPTOP RING DRILL TRIMMER CELL
Weight 0.0 2.3 0.0 0.0 0.0
Purity 14
Brand APPLE RIOBY TORO SAMSUNG
Model MACKBOOK PRO D5521 0242 SM-N900T
SerialNum W8046WCAGX 77720 66759 RV8F90YLZ9W
Run Code Online (Sandbox Code Playgroud)
假设您使用的是 Informix 12.10.XC8 或更高版本,您可以尝试使用正则表达式来解析描述字符串(请参阅此处的在线文档)。
例如,对于序列号,您可以执行以下操作:
UPDATE tblitems
SET
serialnum =
DECODE
(
regex_match(description, '(.*)(S\/N)(.*)', 3)
, 't'::BOOLEAN, regex_replace(description, '(.*)(S\/N)([[:blank:]]?)([[:alnum:]]*)(.*)', '\4', 0, 3)
, 'f'::BOOLEAN, ''
)
Run Code Online (Sandbox Code Playgroud)
因此,在前面的示例中,我正在测试描述是否包含字符串S/N
,如果是这样,我将使用regex_replace
它返回后面的值,在本例中是正则表达式中的第四个匹配组(我不使用regex_extract
它来获取值,因为它似乎返回多个值,我收到错误-686)。
您可以将此方法扩展到其余列,并查看正则表达式是否足以解析描述列。