我在表的列(列名:路径)中有一个非常大的文本字符串(表名: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位数字吗?怎么样?
答案 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