我正在使用 Oracle SQL 并希望从单列字符串中进行解析,一般如下
suitjacket 899, height195cm weight80kg male
blazerjacket 1099, height170cm weight65kg female
pants 299, height160cm weight89kgs male
coat 1099, height165cms weight60.5kg female
请注意,有时单位是复数形式,末尾有额外的“s”。如何使用 Oracle 兼容的 SQL 查询将 height
和 weight
数据提取到它们自己单独的列中?
| height | weight |
-------------------
| 195 | 80 |
| 170 | 65 |
| 160 | 89 |
| 165 | 60.5 |
我想我必须使用 substring
或 regex
。 substring
似乎不合适,因为字符串中的数据位置不固定。 regex
似乎更好,但我不确定如何制作 regex
然后将其存储在单独的列中,一个用于 height
另一个对于权重
。
最佳答案
给定示例设置:
CREATE TABLE tbl
(field varchar(48));
INSERT INTO tbl (field) VALUES ('suitjacket 899, height195cm weight80kg male');
INSERT INTO tbl (field) VALUES ('blazerjacket 1099, height170cm weight65kg female');
INSERT INTO tbl (field) VALUES ('pants 299, height160cm weight89kgs male');
INSERT INTO tbl (field) VALUES ('coat 1099, height165cms weight60.5kg female');
您可以结合使用 regexp_substr 和 replace 函数,如下所示:
select to_number(regexp_substr(field, 'height(\d+\.?\d+)', 1, 1, 'i', 1)) height,
to_number(regexp_substr(field, 'weight(\d+\.?\d+)', 1, 1, 'i', 1)) weight
from tbl;
这是一个demo上述的。这里有一些引用资料:regexp_substr , replace , regex cheat sheet
祝你好运!
关于SQL解析数字数据的列字符串并存储在单独的列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29002022/