2

我正在尝试使用 SQL 函数返回增值税号的前缀。由于这些数字的一些变化和国家的差异以及数据库中的错误,前缀的长度从 0 到 4 个字符不等。所以我的函数的输入是一个字符串,前缀不是数字字符,然后是一些数字。例如 ES012345678,然后我只想返回 ES。

我为它编写了一个函数,但它失败了,它只返回 NULL,即使输入类似于示例。

有谁知道我的错误在哪里?

这是我的 SQL 代码:

    ALTER FUNCTION [dbo].[returnPreOfVat] 
(
    -- Add the parameters for the function here
    @VATstring varchar
)
RETURNS varchar
AS
BEGIN
    -- Declare the return variable here
    DECLARE @Result varchar
     DECLARE @char varchar(2)
     DECLARE @counter int
     SET @counter =1;
     SET @char = '';

    WHILE (@counter < 5) --check some from the front
        BEGIN
        SET @char = SUBSTRING(@VATstring, @counter,1); --get next char from front
        IF(ISNUMERIC(@char)<>1) -- not numeric
            BEGIN
            SET @Result = @Result + @char;
            END
        SET @counter=@counter+1;
        END
    -- Return the result of the function
    RETURN @Result

END
4

2 回答 2

1

您从未初始化结果,请尝试:

DECLARE @Result varchar = ''

如果正确回忆NULL + str = NULL。

于 2013-06-13T09:09:47.050 回答
0

我认为循环在这里是多余的。我会结合 LEFT 和 PATINDEX 功能

select LEFT(@VATstring, PATINDEX('%[0-9]%', @VATstring)-1)
于 2013-06-13T09:12:58.453 回答