Sql 跨不同字符串长度的子字符串
我有以下子字符串命令:Sql 跨不同字符串长度的子字符串,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有以下子字符串命令: RTRIM(LTRIM(SUBSTRING(FileName, CHARINDEX('-', FileName, 0)+1, CHARINDEX('-', FileName, 0)-7 ))) 并具有如下所示的文件路径: "C:\James\AAA(9) - V0001514 MR J BLOGGS.pdf" returns "V0001514" "C:\James\test(100) - V0001585 MRS A SMITH.pdf returns "V0
RTRIM(LTRIM(SUBSTRING(FileName, CHARINDEX('-', FileName, 0)+1, CHARINDEX('-', FileName, 0)-7 )))
并具有如下所示的文件路径:
"C:\James\AAA(9) - V0001514 MR J BLOGGS.pdf" returns "V0001514"
"C:\James\test(100) - V0001585 MRS A SMITH.pdf returns "V0001585 MR"
第一个返回正确的结果,但第二个返回额外的字符。是否有人能找到确保V*号码始终正确返回的方法?尝试以下方法,希望它能帮助您:
DECLARE @FileName VARCHAR(100)='C:\James\AAA(9) - V0001514 MR J BLOGGS.pdf'
SELECT @FileName=SUBSTRING(@FileName,CHARINDEX('-',@FileName)+2,LEN(@FileName)-CHARINDEX('-',@FileName))
SELECT LEFT(@FileName,CHARINDEX(' ',@FileName)-1)
尝试以下方法,希望对您有所帮助:
DECLARE @FileName VARCHAR(100)='C:\James\AAA(9) - V0001514 MR J BLOGGS.pdf'
SELECT @FileName=SUBSTRING(@FileName,CHARINDEX('-',@FileName)+2,LEN(@FileName)-CHARINDEX('-',@FileName))
SELECT LEFT(@FileName,CHARINDEX(' ',@FileName)-1)
问题是您已将数据长度固定为-7 你可以试试:
SELECT SUBSTRING (@DATA, CHARINDEX('-', @DATA)+1,
CHARINDEX(' ', LTRIM(SUBSTRING(@DATA, CHARINDEX('-', @DATA)+1, LEN(@DATA)))))
结果:
"C:\James\AAA(9) - V0001514 MR J BLOGGS.pdf" returns "V0001514"
"C:\James\test(100) - V0001585 MRS A SMITH.pdf returns "V0001585"
问题是您已将数据长度固定为-7 你可以试试:
SELECT SUBSTRING (@DATA, CHARINDEX('-', @DATA)+1,
CHARINDEX(' ', LTRIM(SUBSTRING(@DATA, CHARINDEX('-', @DATA)+1, LEN(@DATA)))))
结果:
"C:\James\AAA(9) - V0001514 MR J BLOGGS.pdf" returns "V0001514"
"C:\James\test(100) - V0001585 MRS A SMITH.pdf returns "V0001585"
你可以用这个公式
RTRIM(LTRIM(SUBSTRING(FileName, CHARINDEX('-', FileName, 0)+1, 7 )))
样本:
DECLARE @FileName1 VARCHAR(255) = 'C:\James\AAA(9) - V0001514 MR J BLOGGS.pdf" returns "V0001514'
DECLARE @FileName2 VARCHAR(255) = 'C:\James\test(100) - V0001585 MRS A SMITH.pdf returns "V0001585 MR'
SELECT
RTRIM(LTRIM(SUBSTRING(@FileName1, CHARINDEX('-', @FileName1, 0)+1, 7 ))) F1,
RTRIM(LTRIM(SUBSTRING(@FileName2, CHARINDEX('-', @FileName2, 0)+1, 7 ))) F2
结果:
F1 F2
------- -------
V00015 V00015
你可以用这个公式
RTRIM(LTRIM(SUBSTRING(FileName, CHARINDEX('-', FileName, 0)+1, 7 )))
样本:
DECLARE @FileName1 VARCHAR(255) = 'C:\James\AAA(9) - V0001514 MR J BLOGGS.pdf" returns "V0001514'
DECLARE @FileName2 VARCHAR(255) = 'C:\James\test(100) - V0001585 MRS A SMITH.pdf returns "V0001585 MR'
SELECT
RTRIM(LTRIM(SUBSTRING(@FileName1, CHARINDEX('-', @FileName1, 0)+1, 7 ))) F1,
RTRIM(LTRIM(SUBSTRING(@FileName2, CHARINDEX('-', @FileName2, 0)+1, 7 ))) F2
结果:
F1 F2
------- -------
V00015 V00015
谢谢,这似乎给了我基于格式的最佳结果。谢谢,这似乎给了我基于格式的最佳结果。