Sql 基于preqrequisite从列(VARCHAR)中提取数值
当前,我从SQL server访问一个表视图,并在导出之前根据需要编写自定义SQL查询以检索/筛选/创建自定义列。现在,在该视图中,其中一列具有如下文本值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-
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]”的可能的重复项