在字段中遇到特殊字符(例如“ /”)时创建新行

时间:2019-05-09 13:05:58

标签: sql sqlite mariadb

每当在特定字段中遇到斜线时,我都试图复制一条记录。

问题的背景:我正在尝试比较两个包含项目编号,项目描述和项目序列号的数据列表。一个列表包含项目数量和状态信息,另一个列表包含项目位置信息,因此我试图将位置列表与主列表匹配。问题在于这两个列表是彼此独立创建的,因此它们都有错误,而且我只能在SQL中进行内部联接约20%。其余的不匹配,因为一个列表或另一个列表中的项目编号有误,序列号可能在一个列表中缺少一位数字,而且我也无法很好地比较术语,因为一个人可能会说“ Hand Wrench” ”,其他人可能会说“ 5mm套筒扳手”。

此外,一个数据列表具有保存在每个记录中的与某个主要项目相关的多个项目。他们通过在序列号字段中存储多个由斜杠分隔的序列号来实现此目的。

尝试使用Alteryx中的Levenshtein差异(模糊匹配)来进行序列号/项目号匹配。由于序列号是连续的,项目编号经常是错误的,并且项目描述可能看起来与人类相似,但是字符长度可能有很大的不同(例如,如果列表中的“卡车”可能与之不匹配),则会造成太多的误报。其他列表中有“卡车,8轮,货物,平板车”)。

如果一个列表中的序列号包含在另一列表中(序列号字段中有多个序列号),我目前正在尝试仅匹配列表。

我当前正在使用的示例SQLite代码

select * from [MISSING ITEMS LIST] as a
left join [RFID TAG SCAN] as b on 
b.[SERIAL NUMBER] like '%' || (a.[SERIAL NUMBER] || '%')
where b.[SERIAL NUMBER] <> '' and b.[SERIAL NUMBER] is not null

我要实现的目标:

从上方复制此部分: 因此表A可能具有以下内容:

Record# Item#   Description   SN 
1,      156928,  Truck,       1234
2,      209344,  Truck Cover, 5588

表B可能有这个

Record# Item#   Description SN 
1,      156928, Truck,      5588/01234

为了简化分析,我想将表B转换为此:

Record# Item#   Description SN 
1,      156928, Truck,      5588
1,      156928, Truck,      01234

2 个答案:

答案 0 :(得分:0)

如果我假设最多有一个斜杠,那么在MariaDB中,您可以执行以下操作:

select Record, Item, Description
       substring_index(SN, '/', 1) as SN
from t
union all
select Record, Item, Description
       substring_index(SN, '/', -1) as SN
from t
where SN like '%/%';

答案 1 :(得分:0)

要将表B转换为所需的格式,请使用“文本转换为列”工具

enter image description here

在“配置”中,将定界符设置为“ /”,然后选择“拆分为行”

enter image description here