我有一个数据表,它有一列作为Acctno,预期显示在单独的列中
|Acctno | expected_output|
|ABC:BKS:1023049101 | 1023049101 |
|ABC:UWR:19048234582 | 19048234582 |
|ABC:UEW:1039481843 | 1039481843 |
我知道在Oracle SQL中我使用了以下
select regexp_substr(acctno,'[^:]',1,3) as expected_output
from temp_mytable
但在Microsoft SQL Server中,我收到一个错误,即regexp_substr
不是内置函数
如何解决此问题?
我们可以在这里使用PATINDEX
和SUBSTRING
:
SELECT SUBSTRING(acctno, PATINDEX('%:[0-9]%', acctno) + 1, LEN(acctno)) AS expected_output
FROM temp_mytable;
演示
注意,这个答案假设第三个组件总是以数字开头,并且前两个组件没有任何数字。如果这不是真的,那么我们将不得不做更多的工作。
如果所需的值是字符串的最后一部分,并且不超过4个段,则为另一个选项。
Select *
,NewValue = parsename(replace(Acctno,':','.'),1)
from YourTable