如何用Oracle REGEXP_SUBSTR提取指定格式的病例编号?
解决Oracle REGEXP_SUBSTR提取病例编号的问题
你的正则表达式有两个关键错误导致返回NULL:
- 匹配文本用了英文
Case:,但实际字段里是中文“病例编号:”,完全不匹配 - 编号部分的正则逻辑错误:
[0-9]\-\[0-9]是匹配数字-[0-9]这个字符串(因为\[是转义的左括号),和目标格式SPXX-XXXXX完全不符
正确的提取代码
如果要提取完整的“病例编号: SP12-34567”字符串,用这个:
REGEXP_SUBSTR(BSE.NOTES, '病例编号:\s*SP\d{2}-\d{5}', 1, 1, NULL) AS CASE_NUMB
如果只需要提取编号部分(比如SP12-34567),可以用分组捕获(Oracle 11g及以上支持指定分组):
REGEXP_SUBSTR(BSE.NOTES, '病例编号:\s*(SP\d{2}-\d{5})', 1, 1, NULL, 1) AS CASE_NUMB
正则表达式说明
病例编号::精确匹配中文的标签文本\s*:匹配任意数量的空白字符(包括多个空格、制表符,对应字段里的大量空格)SP\d{2}-\d{5}:匹配目标编号格式:SP:固定前缀\d{2}:两位数字(比如示例里的12)-:连字符\d{5}:五位数字(比如示例里的34567)
如果你的编号数字位数可能有变化(比如有时是6位),可以把\d{5}改成\d{5,6}来兼容5-6位数字。
内容的提问来源于stack exchange,提问作者dwaynesworld0213
相关产品推荐
相关产品推荐

