SQL: 提取字符串的特定部分
SQL: Extract specific part of string
我正在尝试找出如何使用 Oracle SQL[= 中的 select 语句提取字符串的特定部分(由多个术语组成) 30=].
列中的值看起来有点像 '2E WK 12-345-678 TM 13-06-2017'
,每行的格式略有不同。
现在我想创建一个新列,只显示每行的 '123-456-789'
部分。现在的问题是:如何从每行中识别 3 个数字、连字符、3 个数字、连字符、3 个数字 的确切格式?
SUBSTR(...) 没有为我做这件事,因为有问题的部分并不总是在同一个位置。然后我尝试申请 REGEXP_LIKE(...)
但这也不是 return 正确的值。
我应该如何编写 SQL 语句来执行此操作?非常感谢帮助。
字符串示例:
2E XX **18-580-0111**
**18-990-0020**: 11.2.11-11.14.19
**65-660-0838** 2015 xxxx core sysxx
**78-140-401** t/m 0019
** = specific part of the string that's needed
亲切的问候!
你的问题可以直接翻译成正则表达式,for regexp_substr()
:
select col, regexp_substr(col, '[0-9]{2}-[0-9]{3}-[0-9]{3}')
我正在尝试找出如何使用 Oracle SQL[= 中的 select 语句提取字符串的特定部分(由多个术语组成) 30=].
列中的值看起来有点像 '2E WK 12-345-678 TM 13-06-2017'
,每行的格式略有不同。
现在我想创建一个新列,只显示每行的 '123-456-789'
部分。现在的问题是:如何从每行中识别 3 个数字、连字符、3 个数字、连字符、3 个数字 的确切格式?
SUBSTR(...) 没有为我做这件事,因为有问题的部分并不总是在同一个位置。然后我尝试申请 REGEXP_LIKE(...) 但这也不是 return 正确的值。
我应该如何编写 SQL 语句来执行此操作?非常感谢帮助。
字符串示例:
2E XX **18-580-0111**
**18-990-0020**: 11.2.11-11.14.19
**65-660-0838** 2015 xxxx core sysxx
**78-140-401** t/m 0019
** = specific part of the string that's needed
亲切的问候!
你的问题可以直接翻译成正则表达式,for regexp_substr()
:
select col, regexp_substr(col, '[0-9]{2}-[0-9]{3}-[0-9]{3}')