【发布时间】:2018-12-01 05:46:57
【问题描述】:
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
);
编辑更新:下面的示例数据存储在 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||||||||
我需要使用 cmets 中提到的规则将示例项目描述解析到下面的列中:
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}
我想使用 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
【问题讨论】:
-
我对你的标签有点困惑。看来您的问题是基于使用 Informix 数据库。目前尚不清楚您的“样本”存在于何处。似乎 sql server 在这里也没有任何作用。如果你想使用 SSIS 作为导入工具,你可以(我相信它可以使用 Informix db)。
-
在我的帖子的最顶部,它显示 Informix 12.10,示例数据位于表定义下方。如果我无法在 Informix 中完成我所需要的,那么 SQL-Server 和 SSIS 可能是一个可行的解决方案。
-
如果您还可以发布您期望的样本实际结果,那将会有所帮助。一些规则。例如
RING条目,它没有品牌,没有型号,也没有序列号。话虽如此,Informix 12.10.XC8 具有 Regex 扩展,可用于您想要的。另一种方法是创建一个或多个存储过程来解析描述。 -
我想我会首先确定 case 语句的项目类型是 1 还是 2,扫描整个描述字符串,检查 description[1] 是字母还是数字,如果 description[1] 是一个数字,检查 description[2] 是否是一个数字...,检查 BRAND 的间距,定位 MODEL,S/N 检查前后的空格等...
-
除了将描述字段分解为离散值之外,是否需要对结果输出进行旋转?