Postgres の varchar フィールドからいくつかの値を取得しようとしています。*product_name* フィールドには、「Big Bag 24-0-3 Twenty Gallons」または「Small Bag 0-14-40」のようなものを含めることができ、製品コードは #-#-# です。製品コードの数字は 0 の場合もあれば、1 桁または 2 桁の場合もありますが、2 つのダッシュで区切られた 3 つの数字が常に存在します。
一致する製品が正しく返されましたが、今度は各数値を個別のフィールドに取得する必要があるため、部分文字列の返還を手伝ってくれる私よりも頭の良い人に本当に感謝しています!
この Regex Match は正しい製品を返します。
select * from products where product_name LIKE '%_-_-_%'
部分文字列を使用して製品コードを返そうとしましたが、2 桁の 3 番目の数字を持つ製品が切り捨てられています (つまり、「Big Bag 24-0-32 Foo」は「24-0-3」を返します)。
select trim(substring(name from '%#"__-_-_#"%' for '#')),*
from products where name LIKE '%_-_-_%'
とにかく、整数だけではあまり役に立ちません。3 つの数値のそれぞれを別々の部分文字列に抽出する必要があります。