Sql 基于preqrequisite从列(VARCHAR)中提取数值

Sql 基于preqrequisite从列(VARCHAR)中提取数值,sql,sql-server,Sql,Sql Server,当前,我从SQL server访问一个表视图,并在导出之前根据需要编写自定义SQL查询以检索/筛选/创建自定义列。现在,在该视图中,其中一列具有如下文本值 Description Transaction 12345678-1 Tx234567890-2 45678901-12 55667788-20 Inv# 12457800-2 现在我只想创建一个自定义列,它将从该字符串中提取所有数值,如下所示 Description 12345678-1 234567890-2 45678901-

当前,我从SQL server访问一个表视图,并在导出之前根据需要编写自定义SQL查询以检索/筛选/创建自定义列。现在,在该视图中,其中一列具有如下文本值

Description
Transaction 12345678-1
Tx234567890-2
45678901-12
55667788-20    
Inv# 12457800-2
现在我只想创建一个自定义列,它将从该字符串中提取所有数值,如下所示

Description
12345678-1
234567890-2
45678901-12
55667788-20
12457800-2
如果您能帮忙,我们将不胜感激

原始数据和期望输出-

提前谢谢你。

试试这个:

declare @t table (name varchar(50))

insert into @t values ('Tx234567890-2'),('Inv# 12457800-2')

select substring(name,PATINDEX('%[0-9]%',name),len(name)) from @t

我试图从字符串中识别和提取的模式如下

Description
Transaction 12345678-1
Tx234567890-2
45678901-12
55667788-20    
Inv# 12457800-2
dddddd-D或DDDDDDDD-DD

D代表数字

所以下面的方法对我有效

SELECT description, 
CASE 
    WHEN PATINDEX('%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9]%', description)>0 THEN SUBSTRING(description, PATINDEX('%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9]%', description), 11)
    WHEN PATINDEX('%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9]%', description)>0 THEN SUBSTRING(description, PATINDEX('%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9]%', description), 10)
END AS refno, 
* 从…起 XXXXX 其中(类似“%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9]”的描述或类似“%[0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9]%”的描述)或类似“%[0-9][0-9][0-9][0-9]-[0-9]”的可能的重复项