我想查詢的一系列整數列看起來像這樣的:10,1010,101010,201010,Postgres的查詢在整數列的起始位
我想所有這一切與10開始的那些。將它們更改爲字符串列不是一個選項。
我的感覺是,這是可能實現使用位串運營商:http://www.postgresql.org/docs/9.3/static/functions-bitstring.html
我想查詢的一系列整數列看起來像這樣的:10,1010,101010,201010,Postgres的查詢在整數列的起始位
我想所有這一切與10開始的那些。將它們更改爲字符串列不是一個選項。
我的感覺是,這是可能實現使用位串運營商:http://www.postgresql.org/docs/9.3/static/functions-bitstring.html
你並不需要「改變」他們字符串列。只投了測試的目的:
SELECT *
FROM tbl
WHERE left(int_col::text, 2) = '10';
或者,更簡潔:
...
WHERE int_col::text LIKE '10%';
這是適當的測試,也因爲你的條件是基於數的十進制字符串表示。
這可能看起來笨,但它可能欺騙優化器到使用索引(如果有一個可用)
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
-- ...
;
要使用的索引(或在任何情況下)使用更簡單的'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));'...... –
可能是:我只是不喜歡數組。如果你喜歡叫我oldfashoned,我只是恨陣列。 – wildplasser
正確指出:陣列是邪惡的。 :)然後,如何列表? 'int_col IN(10,100,1000,10000,...)'。 Postgres在內部翻譯爲'int_col = 10或int_col = 100或..'。 –