Tsql 如何在SELECT或UPDATE语句中使用T-SQLUDF?

Tsql 如何在SELECT或UPDATE语句中使用T-SQLUDF?,tsql,sql-server-2000,user-defined-functions,Tsql,Sql Server 2000,User Defined Functions,上下文:SQLServer2000 我已经写了一个UDF,它给了我另外两个文本之间的文本,即 CREATE FUNCTION dbo.StrBetween ( @Text nvarchar(4000), @Lhs nvarchar(4000), @Rhs nvarchar(4000) ) RETURNS nvarchar(4000) AS BEGIN DECLARE @LhsOffset INT; DECLARE @RhsOffset INT;

上下文:SQLServer2000

我已经写了一个UDF,它给了我另外两个文本之间的文本,即

CREATE FUNCTION dbo.StrBetween 
(
    @Text nvarchar(4000),
    @Lhs nvarchar(4000),
    @Rhs nvarchar(4000)
)
RETURNS nvarchar(4000)
AS
BEGIN
    DECLARE @LhsOffset INT;
    DECLARE @RhsOffset INT;
    DECLARE @Result NVARCHAR(4000);

    SET @LhsOffset = CHARINDEX( @Lhs, @Text );
    IF @LhsOffset = 0 
    BEGIN
        RETURN @Text;
    END
    SET @Result = SUBSTRING( @Text, @LhsOffset+1, LEN(@Text)-LEN(@Lhs));
    SET @RhsOffset = CHARINDEX( @Rhs, @Result );
    IF @RhsOffset = 0 
    BEGIN
        RETURN @Result;
    END
    SET @Result = SUBSTRING( @Result, 1, @RhsOffset - 1 );
    RETURN @Result;
END
如果我有

SELECT dbo.StrBetween('dog','d','g')
但是,当我传入一列作为第一个参数的值时,没有得到响应。比如说,

SELECT [TEST].[dbo].StrBetween(Referrer,'//', '/') as tst FROM tblTest 

referer被声明为nvarchar字段。说到T-SQL,我是个新手。我没有看到什么明显的东西?

这不是调用的问题-这是一个逻辑问题,而且您的
@Rhs
值是
@Lhs
值的一部分

SET @Result = SUBSTRING( @Text, @LhsOffset+1, LEN(@Text)-LEN(@Lhs));
这将删除
@Lhs
字符串的第一个字符。但是,由于第二个字符是
/
,而这正是您的
@Rhs
匹配项要搜索的,因此它会立即在位置1处找到它,因此您会得到一个空字符串

相反,请尝试:

SET @Result = SUBSTRING( @Text, @LhsOffset+LEN(@Lhs), 4000);

你不必精确计算长度。如果您要求4000个字符,而字符串长度仅为12个字符,
子字符串
将最多返回12个字符。所以不要费心计算新的长度。

什么是推荐人内容?你能澄清一下“没有得到回应”吗?您是否返回了错误或不正确的数据?您的函数不适用于
SELECT dbo.StrBetween('http://bbc.co.uk/default.html“,”/“,”/”)
尝试用实际数据测试它。请不要这样编辑。您更改了您的问题,使错误不再出现(然后,似乎要归咎于更新中更正的行)。简言之,这让你的问题读起来像胡说八道,对任何未来的读者都没有帮助。我要把它解开。