为什么我的SQL查询彼此不一致?

时间:2011-08-10 16:40:46

标签: sql

希望这是我能解决的问题,或者有人可以指出一个明显的错误。

我有两个问题:

SELECT HIDEORSHOW FROM tblProspects WHERE PROSPECT_ID = 1261484;

HIDEORSHOW
1

SELECT PROSPECT_ID FROM tblProspects WHERE HIDEORSHOW = 1;

PROSPECT_ID
196248
199004
204190
204338
210918
211932
213332
214186
216980
218254
222420
223578
223824
224429
224390
224672
224714
227031
227481
228363
230040
238168
239230
240790
241409
243827
244553
245785
247947
248349
250426
250640
252399
252555
253610
253949
254641
255109

对不起,长长的名单我只是想让你们看到疯狂。有什么理由会发生这种情况吗?我知道的另一个潜在客户1257506具有此HIDEORSHOW值并且未出现在列表中。

1 个答案:

答案 0 :(得分:2)

我会擅长HIDEORSHOW字段是某种字符串,并且某些值具有前导或尾随空格。

This is true,  due to implicit CASTing:      '1' = 1     (Becomes :  '1' = '1')
This is false, even with implicit CASTing:  ' 1' = 1     (Becomes : ' 1' = '1')


要对此进行测试,请尝试此查询(或在您的SQL版本中等效)...

SELECT PROSPECT_ID FROM tblProspects WHERE CAST(HIDEORSHOW AS INT) = 1;

这将迫使施法变为string => int而不是相反。


或者你可以尝试这个测试...

SELECT '<' + HIDEORSHOW + '>', LEN(HIDEORSHOW) FROM tblProspects WHERE PROSPECT_ID = 1261484;

然后,您将对该字段中的确切值有更多的可见性。