我有一個倉庫零件表,一列有每個零件的描述。描述中包含產品的尺寸,格式始終為:HeightxWidthxDepth。
描述可以是任意數量的字符長,因此維度并不總是在字串的相同位置。
這是表格的示例:
| Part No | Description |
| -------- | ------------------------- |
| ABCDEFGH | Cabinet 245 2070x1014x570 |
| AFFDETGL | Shelves 20104 870x300x330 |
在我的查詢中,我想選擇每個維度,使表格如下所示:
| Part No | Height| Width | Depth |
| -------- | ----- | ----- | ----- |
| ABCDEFGH | 2070 | 1014 | 570 |
| AFFDETGL | 870 | 300 | 330 |
我已經設法使用 REGEX 通過以下查詢從列中提取完整維度:
SELECT
PART_NO,
REGEXP_SUBSTR(DESCRIPTION, '(\d (\.\d |)\s?x\s?\d (\.\d |)(\s?x\s?\d*(\.?\d |))?)')
FROM Products
但我不確定如何在不使用類似INSTR.
誰能告訴我最好的方法是什么?
uj5u.com熱心網友回復:
在數字模式周圍使用捕獲組,然后使用 的第 6 個引數提取各個捕獲組REGEXP_SUBSTR:
SELECT PART_NO,
REGEXP_SUBSTR(
DESCRIPTION,
'(\d \.?\d*)\s*x\s*(\d \.?\d*)\s*x\s*(\d*\.?\d*)',
1,
1,
NULL,
1
) AS height,
REGEXP_SUBSTR(
DESCRIPTION,
'(\d \.?\d*)\s*x\s*(\d \.?\d*)\s*x\s*(\d*\.?\d*)',
1,
1,
NULL,
2
) AS width,
REGEXP_SUBSTR(
DESCRIPTION,
'(\d \.?\d*)\s*x\s*(\d \.?\d*)\s*x\s*(\d*\.?\d*)',
1,
1,
NULL,
3
) AS depth
FROM Products
其中,對于樣本資料:
CREATE TABLE products (Part_No, Description) AS
SELECT 'ABCDEFGH', 'Cabinet 245 2070x1014x570' FROM DUAL UNION ALL
SELECT 'AFFDETGL', 'Shelves 20104 870x300x330' FROM DUAL;
輸出:
PART_NO 高度 寬度 深度 ABCDEFGH 2070 1014 570 AFFDETGL 870 300 330
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/408193.html
標籤:
上一篇:Oracle計算磁區中的行數
