2011-08-10 41 views
2

希望這是我能解決的問題,或者有人可以指出一個明顯的錯誤。爲什麼我的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值,並且未出現在列表中。

+2

因此id的> 999999不顯示? –

+0

HIDEORSHOW的列類型是什麼?它可能是一個字符串而不是數字,實際上可能包含空格。你能告訴我們列的類型嗎? – nycynik

+0

剛檢查HIDEORSHOW被定義爲ENUM('0','1'),並修改我的SQL語句使用字符串'1'給了我正確的結果。我必須弄清楚爲什麼我可以稍後使用1和'1'的奧祕。 – David

回答

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; 

你再有在該領域的精確值更多的知名度。

+0

可能取決於DBMS。以下返回SQL Server 2008 R2中的兩行:SELECT * FROM(SELECT'1'UNION ALL SELECT'1')s(f)WHERE f = 1',即字符串被隱式轉換爲數字,反之亦然。 –

相關問題