2014-05-21 26 views

回答

2

你並不需要「改變」他們字符串列。只投了測試的目的:

SELECT * 
FROM tbl 
WHERE left(int_col::text, 2) = '10'; 

或者,更簡潔:

... 
WHERE int_col::text LIKE '10%'; 

這是適當的測試,也因爲你的條件是基於數的十進制字符串表示。

0

這可能看起來笨,但它可能欺騙優化器到使用索引(如果有一個可用)

SELECT * 
FROM tbl 
WHERE int_col = 10 
    OR int_col/10 = 10 
    OR int_col/100 = 10 
    OR int_col/1000 = 10 
    OR int_col/10000 = 10 
    OR int_col/100000 = 10 
    OR int_col/1000000 = 10 
    OR int_col/10000000 = 10 
    -- ... 
    ; 
+0

要使用的索引(或在任何情況下)使用更簡單的'int_col = ANY(」 {10,100,1000,10000,...}':: int [])',這是sargable。另一方面,如果你需要這麼快,'CREATE INDEX ON tbl(cast(int_col AS text));'和'WHERE int_col :: text LIKE '10%''會更快。或者更加專業化:'CREATE INDEX ON tbl(left(cast(int_col AS text),2));'...... –

+0

可能是:我只是不喜歡數組。如果你喜歡叫我oldfashoned,我只是恨陣列。 – wildplasser

+0

正確指出:陣列是邪惡的。 :)然後,如何列表? 'int_col IN(10,100,1000,10000,...)'。 Postgres在內部翻譯爲'int_col = 10或int_col = 100或..'。 –