oracle sql截取clob字符串PutCall:""C"" Strike:1.0 )中的Strike:1.0
时间: 2023-07-19 16:40:50 浏览: 105
如果字符串是 CLOB 类型,可以使用 DBMS_LOB 包中的 SUBSTR 函数来截取。具体操作如下:
```
SELECT DBMS_LOB.SUBSTR('PutCall:""C"" Strike:1.0 )', INSTR('PutCall:""C"" Strike:1.0 )', 'Strike:') + 7, INSTR('PutCall:""C"" Strike:1.0 )', ')') - INSTR('PutCall:""C"" Strike:1.0 )', 'Strike:') - 7) AS result FROM dual;
```
解析:
1. 使用 INSTR 函数获取字符串中 'Strike:' 和 ')' 的位置。
2. 使用 DBMS_LOB.SUBSTR 函数获取子字符串,其中起始位置为 'Strike:' 的位置加上 7(即 'Strike:' 的长度),长度为 ')' 的位置减去 'Strike:' 的位置再减去 7。
3. 在 SELECT 语句中使用 AS 子句将结果命名为 result。
执行以上 SQL 语句,得到的结果为:
```
1.0
```
相关问题
oracle sql 匹配clob字符串ToDate:""20180208"" PutCall:""C"" Strike:1.0 )(Notice1:""20140205"" Notice2:""20190205"" FromDate:""20190208""中的Strike:1.0
你可以使用Oracle的REGEXP_SUBSTR函数来匹配CLOB字符串中的Strike值。具体的正则表达式可以是:
`Strike:\s*\d+(\.\d+)?`
这个正则表达式匹配以Strike:开头,后面紧跟着0个或多个空格,然后是一个或多个数字,可以包含一个小数点和更多数字。在匹配到的字符串中,可以使用SUBSTR函数来提取Strike值。
完整的SQL语句如下:
```
SELECT SUBSTR(REGEXP_SUBSTR(clob_column, 'Strike:\s*\d+(\.\d+)?'), 8) AS Strike
FROM your_table
WHERE your_condition;
```
其中,clob_column是包含CLOB字符串的列名,your_table是包含该列的表名,your_condition是你的查询条件。这个SQL语句会返回匹配到的Strike值,如果没有匹配到,则返回空字符串。
oracle sql 匹配clob字符串ToDate:""20180208"" PutCall:""C"" Strike:1.023 asdhjfasd )(Notice1:""20140205"" Notice2:""20190205"" FromDate:""20190208""中的Strike:1.0
如果要匹配的字符串中可能包含其他字符,可以使用Oracle的正则表达式函数REGEXP_REPLACE。
可以使用以下SQL语句来提取匹配到的Strike值:
```
SELECT REGEXP_REPLACE(REGEXP_SUBSTR(clob_column, 'Strike:\s*\d+(\.\d+)?\s+'), '[^0-9\.]', '') AS Strike
FROM your_table
WHERE your_condition;
```
其中,clob_column是包含CLOB字符串的列名,your_table是包含该列的表名,your_condition是你的查询条件。这个SQL语句会返回匹配到的Strike值,如果没有匹配到,则返回空字符串。
正则表达式 `Strike:\s*\d+(\.\d+)?\s+` 匹配以 Strike: 开头,后面跟着 0 个或多个空格,然后是一个或多个数字,可以包含一个小数点和更多数字,最后再跟着 1 个或多个空格。函数 REGEXP_SUBSTR 返回匹配到的字符串,然后函数 REGEXP_REPLACE 将所有的非数字和非小数点的字符替换为空字符串,最后得到的就是匹配到的 Strike 值。
阅读全文