根据先决条件从列(VARCHAR)中提取数值

时间:2019-06-13 12:59:31

标签: 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-12
55667788-20
12457800-2

如果可以的话,将不胜感激。

原始数据和所需的输出-https://drive.google.com/file/d/1ze-S15kWi8qcLro8xx9vpSgnPIYCXLSa/view?usp=sharing

提前谢谢您。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

DDDDDDDD-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]%')