我有一个列error_desc,其值为:
(Class :: Method)xxxxCalcModule :: endCustomer中发生了故障。对于日期20160XXX,风扇ID 111232在BL9_XXXXX中无效或不存在。
我可以使用哪种SQL查询来显示该列中的数字111232?该数字位于VARCHAR列的第66位,结束于第71位。
答案 0 :(得分:0)
SELECT substr(ERROR_DESC,66,6) as ABC FROM bl1_cycle_errors where error_desc like '%FAN%'
答案 1 :(得分:0)
此解决方案使用正则表达式。
我面临的挑战是拔出字母数字。在这种情况下,我们必须只保留数字并过滤掉字符串,字母数字或标点,以检测独立数字。
纯字符串和不包含数字的单词可以使用
轻松过滤掉[^[:digit:]]
字母数字的可能组合是: 1.带有字符的开头,包含数字,可能以字符或标点结尾:
[a-zA-Z]+[0-9]+[[:punct:]]*[a-zA-Z]*[[:punct:]]*
2.带数字然后包含字母,可能包含标点:
[0-9]+[[:punct:]]*[a-zA-Z]+[[:punct:]]*
从数字开始然后包含标点符号,可能包含字母:
- [0-9] + [a-zA-Z] [[:punct:]] + [a-zA-Z] - 无法突出显示代码,参考解决方案的最后一个正则表达式组合
使用|组合这些正则表达式我们得到的运营商:
select trim(REGEXP_REPLACE(error_desc,'[^[:digit:]]|[a-zA-Z]+[0-9]+[[:punct:]]*[a-zA-Z]*[[:punct:]]*|[0-9]+[[:punct:]]*[a-zA-Z]+[[:punct:]]*|[0-9]+[a-zA-Z]*[[:punct:]]+[a-zA-Z]*',' '))
from error_table;
在大多数情况下都可以使用。