sql选择值的分数等于9999

时间:2017-09-22 07:58:40

标签: postgresql

我有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'修改

我不知道如何解决它并寻求你的帮助。

2 个答案:

答案 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'  

我只是想说你可以用这个搜索时间。