我有以下字符串:
declare @Request varchar(255)
set @Request= '**URGENT** Apple / Iphone/ Test/Future Resolution/Approved'
使用SQL查询,如何只返回“Apple”这个词?
我尝试过类似的东西,但它不起作用:
select substring(@Request,CharIndex('** ',@Request),charindex(' / ',@Request))
非常感谢您的投入,
洛瑞
答案 0 :(得分:2)
您可以调整所需的内容以使其正确无误:
declare @Request varchar(255)
set @Request= '**URGENT** Apple / Iphone/ Test/Future Resolution/Approved'
select substring(@Request,CharIndex('** ',@Request) + 3,charindex(' / ',@Request)-CharIndex('** ',@Request) -3)
基本上你的子串需要一个开始和长度,所以你需要调整你的参数。
我觉得在这里注意到,通过在某种程度上参数化分隔符然后使用LEN(first_delim)而不是硬编码3和-3,可以自然地尝试使其更通用。这里的问题是LEN()忽略了这两个分隔符中的尾随空格。如果delim是VARCHAR,你可以改为使用DATALENGTH,但是如果是NVARCHAR,你必须划分结果。
我认为值得指出的是,由于LEN适用于NVARCHAR,因此DATALENGTH本身并不存在。
SELECT LEN(N'** ')
,LEN(N'** ')
,DATALENGTH('** ')
,DATALENGTH(N'** ')
,DATALENGTH(N'** ')/2
答案 1 :(得分:1)
试试这个:
select SUBSTRING(@request, CHARINDEX('Apple', @Request, 0), LEN('Apple'))
如果Apple只是一个例子,而你需要一个动态的,请试试这个:
select SUBSTRING(@request, CHARINDEX('** ', @Request, 0)+3, CHARINDEX(' / ', @Request, 0)-CHARINDEX('** ', @Request, 0)-3)
答案 2 :(得分:0)
第三个参数应该是您尝试提取的字符串长度。试试这个:
select substring(@Request,CharIndex('** ',@Request),charindex(' / ',@Request)-CharIndex('** ',@Request))
答案 3 :(得分:0)
这里有一些问题。首先,子串的第三个参数是子串的LENGTH,而不是最终索引。 其次,您没有考虑初始搜索字符串的长度' **'是三个字符,charindex返回字符串的START位置。 这将满足您的需求:
declare @Request varchar(255)
set @Request= '**URGENT** Apple / Iphone/ Test/Future Resolution/Approved'
select substring(@Request,charindex('** ',@Request) + 3, charIndex(' /',@Request) - charindex('** ',@Request)- 3)
因此使用+ -3以上