0

我在表(表名:KYC_Path)的列(列名:路径)中有一个非常大的文本字符串。该表基本上包含非常大的图像路径文本字符串,我需要从中提取特定数字(文件编号)。文本字符串如下所示:

F:\Original\15561 done\sohan1 15561\output_after_name_mapping\01710043429(1).jpg

T:\所有备份\备份1TB(服务器)\所有扫描文件(sohan)\01832876657 (1).JPG

T:\ALL BACKUP\form 2TB passport HDD\All backup\Afren\24313\24313 Nupur_1box 651\output_after_name_mapping\01918082763(1).jpg

T:\ALL BACKUP\zaman all scan\16830 noboni1 box548\output_after_name_mapping\01823152145(1).jpg

我只需要收集以下数字(不带 (1).jpg 部分的文件名),这样我的新列将如下所示:

01710043429

01832876657

01918082763

01823152145

我已经设计了一种使用以下公式的方法:

select (right ([path],18)) as 'wallet_path', [path] into KYCPathNew
from [dbo].[KYCPath]


select (left ([wallet_path],11)) as 'wallet_path_new', [path] into KYCPathNew2
from [dbo].[KYCPathNew]

但是,由于数字 (01823152145) 和文件扩展名 ((1).jpg) 之间存在空格,这给一些文件名不正确的行带来了一些问题。并且遗漏了文件名中的一两个字符。

有没有其他方法可以更有效地收集所有文件名?我可以让 SQL Server 找到最后一个反斜杠,然后从那里取 11 位数字吗?如何?

4

1 回答 1

1

请尝试以下查询:

SELECT 
    CASE WHEN CHARINDEX('(', [Path])>0 
        THEN LEFT([Path], CHARINDEX('(', [Path])-1) 
    ELSE [Path] END [Path]
FROM(
    SELECT 
        CASE WHEN CHARINDEX('\', [Path])>0 THEN
            REPLACE(RIGHT([Path], CHARINDEX('\', REVERSE([Path])) - 1), '.jpg', '') 
        ELSE [Path] END [Path]
    FROM 
        KYC_Path
)x
于 2013-10-02T09:10:17.290 回答