如何将 regexp_substr(Oracle) 转换为 SQL 服务器?
How to convert regexp_substr(Oracle) to SQL Server?
我有一个数据 table,其中有一列为 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 服务器中我收到一个错误 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
我有一个数据 table,其中有一列为 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 服务器中我收到一个错误 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