0

それぞれが共通のキー (この場合はシリアル番号) を持つさまざまなテーブルをリンクする必要があります。'037443' のようにキーの先頭にゼロが付いているテーブルもあれば、'37443' のようにゼロが付いていないテーブルもあります。どちらの場合も、シリアルは同じ製品を指します。混乱させるのは、シリアルの「数字」が常に単なる数値であるとは限らないことです。たとえば、「BDO1234」のようになる場合があります。これらの場合、先行ゼロはありません。

WHERE ステートメント (WHERE a.key = b.key) を使用することをお勧めしますが、必要に応じて結合を使用することもできます。これを行う方法はありますか?

私はまだ勉強中なので、できればシンプルにしてください。どうもありがとう。

4

2 に答える 2

1

関数を作成する必要があります

CREATE FUNCTION CompareSerialNumbers(@SerialA varchar(max), @SerialB varchar(max))
RETURNS bit

AS

BEGIN
    DECLARE @ReturnValue AS bit
    IF (ISNUMERIC(@SerialA) = 1 AND ISNUMERIC(@SerialB) = 1)    
    SELECT @ReturnValue = 
        CASE
            WHEN CAST(@SerialA AS int) = CAST(@SerialB AS int) THEN 1
            ELSE 0
        END
    ELSE
        SELECT @ReturnValue = 
        CASE
            WHEN @SerialA = @SerialB THEN 1
            ELSE 0
    END
    RETURN @ReturnValue
END;
GO

両方とも数値の場合は整数として比較し、それ以外の場合は文字列として比較します。

于 2016-01-26T10:22:05.430 に答える