通过子串连接/查询表

时间:2012-08-09 10:54:44

标签: sql sql-server

目前我的查询部分基于两个表的连接,根据其中的两个数字列。

假设一个表的编号如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.我认为这是因为第二条中的小范围。我哪里出错了?或者我的代码如何变得更强大/更有效?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

你需要像这样使用CAST

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

SEE THIS FIDDLE

有关详细信息,请参阅SQL SERVER – Convert Text to Numbers (Integer) – CAST and CONVERT