从SQL Server中的非常大的文本字符串中收集特定的文本字符串

时间:2013-10-02 09:03:10

标签: sql sql-server

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

  

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

     

T:\ ALL BACKUP \ BACK UP 1TB(SERVER)\ ALL SCANNED FILES(sohan)\ 01832876657(1).JPG

     

T:\ ALL BACKUP \表格2TB护照硬盘\所有备份\ 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位数字吗?怎么样?

1 个答案:

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