0

結合に基づいて2つのテーブルを照合する必要がある複雑なSQLステートメントがあります。複雑なクエリの最初の部分には、Smallintとしてテーブルに格納されているロケーション番号があり、2番目のテーブルにはCHAR(4)として格納されているストア番号があります。私はsmallintを次のようにchar(4)にキャストすることができました:

CAST(STR_NBR AS CHAR(4)) AND LOCN_NBR

問題は、Smallintが先頭の「0」を抑制するため、結合がLEFTOUTERJOINの右側からnull値を返すことです。

Table set A(Smallint)             Table Set B (Char(4))
|   96     |                      |  096     |
|   97     |                      |  097     |
|   99     |                      |  099     |
|  100     |  <- These return  -> |  100     |
|  101     |  <- These return  -> |  101     |
|  102     |  <- These return  -> |  102     |

すべてが返されるようにmakeを追加する必要がありますが、joinステートメントにあるので、他の条件ではなく、特定の条件で最初にゼロを追加するにはどうすればよいですか?

4

3 に答える 3

2
SELECT RIGHT('0000' || STR_NBR, 4)
FROM TABLE_A

テーブルBCHARをtinyintにキャストすることも同様に機能します。

SELECT ...
FROM TABLE_A A
JOIN TABLE_B B
  ON A.num = CAST(B.txt AS TINYINT)
于 2012-09-07T19:09:30.073 に答える
1

LPAD関数を試してください:

 LPAD(col,3,'0' ) 
于 2012-09-07T19:07:12.443 に答える
1

次の手順を実行することで、常に3桁のロケーション番号を取得するために一致させることができました。

STR_NBRは元々SmallINT(2)として定義されていましたLOCN_NOは元々Char(4)として定義されていました

SELECT ...
FROM TABLE_A AS A
JOIN TABLE_B AS B
  ON CAST(SUBSTR(DIGITS(A.STR_NBR),3,3)AS CHAR(4)) = B.LOCN_NO
于 2012-09-10T19:14:53.610 に答える