【发布时间】:2015-12-29 06:40:12
【问题描述】:
我正在努力处理 Oracle SQL 中的查询,希望从存储在 Oracle 数据库中的一些文本中获取一些时间。
Table :
kde_test (myString varchar(50))
Table contents (3 records):
'task1 - 6m'
'task2 - 66m'
'task3 - 666m'
我只想得到字符串中有趣的部分,即时间,所以我只想得到“6”、“66”和“666”作为结果。
在这个论坛上搜索了一下,最终得到了这个查询,但似乎我没有完全理解它,因为它返回的结果是: 6m 66m 666m
select
CASE
WHEN myString like 'task1%' THEN substr(myString,9,INSTR(myString,'m',1,1)-1)
WHEN myString like 'task2%' THEN substr(myString,9,INSTR(myString,'m',1,1)-1)
WHEN myString like 'task3%' THEN substr(myString,9,INSTR(myString,'m',1,1)-1)
END
from kde_test
where myString like 'task%'
编辑:
由于某些解决方案(已经感谢您的快速响应)考虑了特定值(例如,所有 3 条记录以 '6m' 结尾),也许最好考虑这些值:
Table contents (3 records):
'task1 - 6m'
'task2 - 58m'
'task3 - 123m'
【问题讨论】:
-
看起来这可以简化为在第二次出现的空格和最后一次出现的空格之间找到字符串,但不包括在内。
-
没问题,您可以简单地使用 SUBSTR 和 INSTR 并使其动态化。使用您编辑的值查看编辑后的答案。