2016-11-25 218 views
2

我目前使用下面列出的函数来查找2个字符串之间的文本,我的问题是没有找到任何东西,它只是返回一个错误,我不会返回一个空格或空值,任何人都可以提供任何请提供关于如何改变它的建议。?2字符串之间的字符串

CREATE FUNCTION [dbo].[udf_GetStringBetween2Strings] 
(
    @String varchar(max), 
    @FirstString varchar(256), 
    @SecondString varchar(256) 
) 
RETURNS VARCHAR(max) 
AS 
BEGIN 

    DECLARE @FirstPosition int, @SecondPosition int 
    SET @FirstPosition = CHARINDEX(@FirstString,@String) + LEN(@FirstString) 
    SET @SecondPosition = CHARINDEX(@SecondString,@String) 
    RETURN (SELECT SUBSTRING(@String, @FirstPosition, @SecondPosition - @FirstPosition)) 

END 
+0

什么是你的输入参数和你有什么期望的输出 – Mansoor

+0

曼苏尔嗨,我已经重新检查功能,我很遗憾,当我最初创建它引起了我原来的问题没有正确保存它。虽然这已经解决了我原来的问题,但我认为我会进一步调查它。例如,我的函数调用的内容类似于select dbo.udf_GetStringBetween2Strings('','',''),因为您可以看到我要查找的第一件事是字符串,此返回't_customer_id>我真的很想在第一个字符串不存在的时候找到'Not Found'。 – PJD

+0

您是否检查了我的下面的查询。是否适合您的预期结果..? – Mansoor

回答

0

最直接的方法是检查CHARINDEX的结果(它返回一个0时,没有找到匹配)。例如

DECLARE @FirstPosition int, @SecondPosition int 
SET @FirstPosition = CHARINDEX(@FirstString,@String) 
if @FirstPosition = 0 return 'Not found' 
set @FirstPosition += LEN(@FirstString) 
SET @SecondPosition = CHARINDEX(@SecondString,@String, @FirstPosition) 
if @SecondPosition = 0 return 'Not found' 
return SUBSTRING(@String, @FirstPosition, @SecondPosition - @FirstPosition) 
+0

感谢您的回应,这是有效的,当其中一个参数丢失,但是当他们都没有选择它们之间的东西时,它只是返回Not Found – PJD

+0

刚刚测试过它,它似乎工作,但是当粘贴一个示例并从SO,它没有。它可能是整理或一些隐藏的字符。你可以尝试一个新的(非粘贴)的例子吗? –

+0

感谢您的回复,我刚刚尝试从头开始输入整个函数,但仍然遇到了相同的问题。 – PJD

0

尝试这个

CREATE FUNCTION [dbo].[udf_GetStringBetween2Strings] 
(
    @String varchar(max), 
    @FirstString varchar(256), 
    @SecondString varchar(256) 
) 
RETURNS VARCHAR(max) 
AS 
BEGIN 

    DECLARE @FirstSplit VARCHAR(100),@SecondSplit VARCHAR(100),@ReturnStr VARCHAR(100) 
    SET @FirstSplit = SUBSTRING(@String,0,CHARINDEX(' ',@String)) 
    SET @String = SUBSTRING(@String,CHARINDEX(' ',@String)+1,LEN(@String)) 
    SET @SecondSplit = @String 

    IF @FirstSplit = @FirstString 
     SET @ReturnStr = @FirstSplit 
    ELSE IF @SecondSplit = REPLACE(@SecondString,'?','') 
     SET @ReturnStr = @SecondSplit 
    ELSE 
     SET @ReturnStr = 'Not Found' RETURN @ReturnStr END 
+0

嗨Mansoor,对不起,延迟,我试了你的代码,我的例子和我发布在这里,我回来了“','')“,我回来”在这里我应该看到1,我会晚将此转换为十进制值,但由于当前的结果,我得到转换数据类型的错误varchar到numeric,这是我期望的错误,因为当前的返回结果。感谢您的帮助 – PJD

+0

我编辑了我的查询。与empty.Now现场检查我成功了把用于匹配的情况下,和“未找到”无与伦比的字符串 – Mansoor

+0

曼苏尔嗨,我仍然得到同样的返回值作为之前恐怕结果。 – PJD

相关问题