pul*_*cho 6 sql oracle substring
我正在努力解决Oracle SQL中的查询问题,希望从存储在Oracle数据库中的某些文本中获得一些时间.
Table :
kde_test (myString varchar(50))
Table contents (3 records):
'task1 - 6m'
'task2 - 66m'
'task3 - 666m'
Run Code Online (Sandbox Code Playgroud)
我想只得到字符串的有趣部分,作为时间,所以我想只得到'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%'
Run Code Online (Sandbox Code Playgroud)
编辑:
由于一些解决方案(感谢已经快速响应)考虑了具体的值(例如,所有3条记录以'6m'结尾),也许最好考虑这些值可能是:
Table contents (3 records):
'task1 - 6m'
'task2 - 58m'
'task3 - 123m'
Run Code Online (Sandbox Code Playgroud)
使用SUBSTR和INSTR并使其动态化。
SUBSTR(str,
instr(str, ' - ', 1, 1) +3,
instr(str, 'm', 1, 1) -
instr(str, ' - ', 1, 1) -3
)
Run Code Online (Sandbox Code Playgroud)
例如,
SQL> WITH DATA AS(
2 SELECT 'task1 - 6m' str FROM dual UNION ALL
3 SELECT 'task2 - 66m' str FROM dual UNION ALL
4 SELECT 'task3 - 666m' str FROM dual UNION ALL
5 SELECT 'task4 - 58m' str FROM dual UNION ALL
6 SELECT 'task5 - 123m' str FROM dual
7 )
8 SELECT str,
9 SUBSTR(str, instr(str, ' - ', 1, 1) +3,
10 instr(str, 'm', 1, 1) - instr(str, ' - ', 1, 1) -3) new_st
11 FROM DATA;
STR NEW_STR
------------ ------------
task1 - 6m 6
task2 - 66m 66
task3 - 666m 666
task4 - 58m 58
task5 - 123m 123
SQL>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1889 次 |
| 最近记录: |