2

SQL 関数を使用して VAT 番号のプレフィックスを返そうとしています。これらの番号の一部の変更、国による違い、およびデータベースの誤りにより、プレフィックスの長さは 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 に答える