0

一部の製品番号が変更された後、製品データベースを更新して重複を見つけようとしています。

以前は、変更された項目番号の末尾に余分なダッシュと数字または文字があり、この where 句を使用していました。

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

今、REGEXP は私の頭の上にあります。

旧品番:BRB-0325

新製品番号: 0325-15 (ダッシュの後の番号は 1 桁または 2 桁の数字で構いません)

したがって、基本的には、古い番号から「BRB-」を削除し、新しい項目番号の後に 1 桁または 2 桁の番号を削除する where 句が必要です。

「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 に答える