目前我的查询部分基于两个表的连接,根据其中的两个数字列。
假设一个表的编号如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.我认为这是因为第二条中的小范围。我哪里出错了?或者我的代码如何变得更强大/更有效?
答案 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
有关详细信息,请参阅SQL SERVER – Convert Text to Numbers (Integer) – CAST and CONVERT