Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 跨不同字符串长度的子字符串_Sql_Sql Server_Tsql - Fatal编程技术网

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

谢谢,这似乎给了我基于格式的最佳结果。谢谢,这似乎给了我基于格式的最佳结果。