我有Postgres 9.6索引时间戳列,带有微秒。列中的日期非常随机。我只需要选择在给定时间段内任何秒钟内最后一微秒.9999的记录(假设在'2017-05-01 00:00:00'和'2017-05-02 00:00:00'之间) )。
来源示例:
mydata, 2017-05-01 00:00:00.0312
mydata, 2017-05-01 00:00:00.9431
mydata, 2017-05-01 00:00:02.0000
mydata, 2017-05-01 00:00:03.9999
mydata, 2017-05-01 00:00:04.9999
mydata, 2017-05-01 00:00:05.0793
mydata, 2017-05-01 00:00:05.8356
必需的SQL输出:
mydata, 2017-05-01 00:00:03.9999
mydata, 2017-05-01 00:00:04.9999
表格很大(数十万条记录),因此性能至关重要。
我也可能需要查找'0000'的记录,例如'2017-05-01 00:00:02.0000',因此查询需要足够灵活,以便通过次要查询传递'0000'而不是'9999'修改
我不知道如何解决它并寻求你的帮助。
答案 0 :(得分:1)
如果我找对你 - 你想要像:
t=# create table thetable(d text,ts timestamp);
CREATE TABLE
t=# copy thetable from stdin delimiter '|';
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> a|2017-05-01 00:00:01
>> b| 2017-05-01 00:00:00.9999
>> \.
COPY 2
Time: 33896.222 ms
t=# with lim as (SELECT * FROM thetable where ts > '2017-05-01 00:00:00' and ts < '2017-05-02 00:00:00') select * from lim where right(ts::text,4) = '9999';
d | ts
---+--------------------------
b | 2017-05-01 00:00:00.9999
(1 row)
答案 1 :(得分:0)
我认为你可以像
一样搜索declare @i varchar(100)
select @i= time from (
select convert (time,getdate(),114) as time
)as p
select @i where SUBSTRING(@i,10,4)='9999'
我只是想说你可以用这个搜索时间。