SQL解析数字数据的列字符串并存储在单独的列中

标签 sql regex oracle substr

我正在使用 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 查询将 heightweight 数据提取到它们自己单独的列中?

| height | weight |
-------------------
|   195  |   80   |
|   170  |   65   |
|   160  |   89   |
|   165  |   60.5 |

我想我必须使用 substringregexsubstring 似乎不合适,因为字符串中的数据位置不固定。 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/

相关文章:

Java 正则表达式 : Remove Everything After Last Instance Of Character

wcf - 如何让 Entity Framework 和 WCF 与事务一起工作?好吧……有什么 secret ?

oracle - oracle数据库的所有者是什么?

c - Oracle 相当于 Ingres enquire_sql 或 enquire_ingres?

sql - 在 where 子句中使用计算字段

mysql - 在插入时创建 MySQL 触发器

php - 数据库列内的静态值

sql - PostgreSQL with-delete "relation does not exists"

c# - 从单词索引中获取完整的句子

带有可选非单词字符的 Javascript 正则表达式单词边界