0

目前我有一个查询,该查询部分基于两个表中的两个数字列的连接。

假设一张桌子的数字像 123456789999 (NUM1)

另一个表的数字范围为 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 条。我相信这是因为第二个范围内的小范围。我哪里出错了?或者如何使我的代码更加健壮/有效?

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 回答