0

現在、2 つのテーブル内の 2 つの数値列による 2 つのテーブルの結合に部分的に基づくクエリがあります。

1 つのテーブルに 123456789999 (NUM1) のような番号があるとします。

もう 1 つのテーブルには、1 ~ 9999 (NUM2) の範囲の番号があります。

「NUM1」の5桁目から8桁目までに「NUM2」があるレコードを抜き出したい

現在、私はこのようなことをしています、

FROM Table1 AS T INNER JOIN Table2 AS S 
ON SUBSTRING(T.num1, 5, 4) = S.num2

約 100 件のレコードを取得する必要があることはわかっていますが、8 件しか取得できません。これは、2 番目の範囲が狭いためだと思います。どこで間違ったのですか?または、コードをより堅牢で効果的にするにはどうすればよいですか?

4

2 に答える 2

1

これを試して:

NUM2 のデータ型は int であるため、0001 は 1 と見なされます。

だからこれを試してください:

 FROM Table1 AS T INNER JOIN Table2 AS S 
ON cast(SUBSTRING(T.num1, 5, 4) as int) = S.num2
于 2012-08-09T11:06:16.367 に答える
1

CAST次のように使用する必要があります。

FROM Table1 AS T INNER JOIN Table2 AS S 
ON CAST(SUBSTRING(T.num1, 5, 4) AS INT) = S.num2

このフィドルを見る

詳細については、SQL SERVER – テキストを数値 (整数) に変換 – CAST および CONVERT を参照してください。

于 2012-08-09T11:06:36.490 に答える