0

我正在尝试更新我的产品数据库并在更改某些产品编号后查找重复项。

在过去,更改的项目编号只是在末尾有一个额外的破折号和数字或字母,我使用了这个 where 子句:

where a.ProdNum REGEXP CONCAT('^', b.ProdNum, '(\-|\s)[a-zA-Z0-9]+')

现在 REGEXP 在我头上。

旧产品编号:BRB-0325

新产品编号:0325-15(破折号后的数字可以是任意1位或2位数字)

所以基本上我需要一个 where 子句,它会从旧编号中删除“BRB-”,并在新项目编号之后删除任何 1 或 2 位数字。

我可以删除“BRB-”,但不知道如何处理 1-2 位数字,我真的不知道如何同时做这两个。

where b.ProdNum = CONCAT('BRB-', c.ProdNum)

这是我尝试使用 2 位数字但没有奏效的方法。

where c.ProdNum REGEXP CONCAT('^', b.ProdNum, '(\-)[0-9]{1,2}+')

谢谢你的帮助。

4

3 回答 3

2

假设c.ProdNum是新号码并且b.ProdNum是旧号码:

WHERE CONCAT('BRB-', c.ProdNum) REGEXP CONCAT('^', b.ProdNum, '-[0-9]{1,2}$')

这会将“BRB-”添加到新数字并将其与旧数字进行比较。因此,您将基本上将“BRB-0325-15”与“BRB-0325-nn”进行比较。

于 2012-10-17T17:47:09.627 回答
2

你为什么用REGEXP?使用简单的比较:

where a.ProdNum like concat(substring(b.ProdNum, 4), '-??')

这将匹配0325-ab,但您肯定没有这样的新产品编号。

于 2012-10-17T17:53:30.680 回答
0

这应该适合你:

SELECT
old.*
FROM
products old,
products new
WHERE new.ProdNum REGEXP CONCAT('^', SUBSTRING(old.ProdNum, 5), '-[0-9]{1,2}$')
AND   old.ProdNum LIKE 'BRB-%'

这应该使用一个索引ProdNum是否可用。

于 2012-10-17T17:56:20.293 回答