2017-01-20 5 views
1

このクエリは、レコード?:PostgreSQLが

db2=> select * FROM series WHERE start <= '882001010000' AND "end" >= '882001010000' ORDER BY timestamp DESC LIMIT 1; 
    id |  timestamp  | start | end | 
-------+---------------------+----------+----------- 
23443 | 2016-12-23 17:10:05 | 88160000 | 88209999 | 

またはBETWEENとを返すのはなぜ:

db2=> select * FROM series WHERE '882001010000' BETWEEN start AND "end" ORDER BY timestamp DESC LIMIT 1; 
    id |  timestamp  | start | end | 
-------+---------------------+----------+----------- 
23443 | 2016-12-23 17:10:05 | 88160000 | 88209999 | 

開始と終了は、TEXT列です。

+0

なぜ、「テキスト」として番号を保存していますか?それをしないでください。 –

答えて

3

の文字列が数字ではないため、レコードが返されます。

したがって、'8'は、比較が一度に1文字であるため、'7000000''9000'の間です。

数値の比較を行う場合は、値を数値にキャストできます。あるいは、数値を数値で表現する方が良いでしょう。 Postgresには、非常に大きな精度の優れた機能があります。

+0

ありがとうございます:)それは動作します。 –