Oracle SQL:如何提取表中字段里HRS前的数字?
解决方法
你的原查询返回null是因为正则逻辑错了——你用[[:alpha:]]+匹配字母,但我们要提取的是数字(含小数),这个正则根本匹配不到目标内容。
正确的函数用法(以Oracle为例)
直接用REGEXP_SUBSTR提取"hrs"前的数字序列:
SELECT REGEXP_SUBSTR(SCHEDULE_NAME, '(\d+\.?\d*) hrs', 1, 1, NULL, 1) AS extracted_hours FROM your_table;
参数说明:
(\d+\.?\d*):匹配整数或小数格式的数字(\d+匹配至少1个数字,\.?匹配可选的小数点,\d*匹配小数点后可选的数字)- 最后一个
1:指定提取正则里第1个捕获组的内容(也就是括号里匹配到的数字)
其他数据库适配(比如MySQL)
如果用MySQL,可以用REGEXP_REPLACE替换掉无关内容,只保留目标数字:
SELECT REGEXP_REPLACE(SCHEDULE_NAME, '.*?(\d+\.?\d*) hrs.*', '$1') AS extracted_hours FROM your_table;
验证效果
针对你的示例数据,这个查询会准确返回:
7.78 7.78 7.78 7.78 7
内容的提问来源于stack exchange,提问作者SSA_Tech124
相关产品推荐
相关产品推荐

