PostgreSQL BETWEEN在未完成时选择记录

时间:2017-01-20 12:08:34

标签: 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列。

1 个答案:

答案 0 :(得分:3)

他们正在返回记录,因为您正在进行比较,因为字符串不是数字。

因此:'8'介于'7000000''9000'之间,因为比较一次只有一个字符。

如果要进行数字比较,可以将值转换为数字。或者,更好的是,将数值表示为数字。 Postgres具有非常大的精度。