SQL Server VARCHAR长度和值比较

时间:2015-09-08 02:57:19

标签: sql-server varchar

这是两张桌子。

CREATE TABLE INTKEYTBL 
(
    INTKEY INT IDENTITY(1,1) NOT NULL,
   DUMMY_TEXT VARCHAR(2000) NULL
)

CREATE TABLE REFKEYTBL 
(
    REFID INT NOT NULL,
    REFKEY VARCHAR(20) NOT NULL,
    REF_TEXT VARCHAR(2000) NULL
)

然后,我需要使用REFKEYTBL.REF_TEXT引用密钥获取INTKEYTBL.INTKEY

SELECT REF_TEXT 
FROM REFKEYTBL
WHERE REFKEY IN (SELECT CONVERT(VARCHAR(15), INTKEY) 
                 FROM INTKEYTBL 
                 WHERE DUMMY_TEXT = 'DUMMY')

但查询中没有结果。

我将转换函数VARCHAR(15)的类型更改为VARCHAR(20)

我可以在此查询中看到任何结果。

我想知道为什么我应该准确设置类型和长度来比较每个值?

2 个答案:

答案 0 :(得分:0)

如果REFKEYTBL.REFKEY中的所有文本都是数字,请使用此查询:

Select REFKEYTBL.REF_TEXT FROM REFKEYTBL INNER JOIN INTKEYTBL 
ON Convert(INT,REFKEYTBL.REFKEY) = INTKEYTBL.INTKEY

答案 1 :(得分:0)

尝试使用CAST

http://sqlfiddle.com/#!3/5f96a/1

SELECT REF_TEXT 
FROM REFKEYTBL
WHERE REFKEY IN (SELECT CAST(INTKEY as VARCHAR(15)) 
                 FROM INTKEYTBL 
                 WHERE DUMMY_TEXT = 'DUMMY')