Select语句从时间字符串中提取小时范围

Select语句从时间字符串中提取小时范围,select,postgresql-9.3,where,Select,Postgresql 9.3,Where,我有一个像这样的PostgreSQL表 city_location | isp | date_ | time_ ---------------+------------------------+------------+-------------- Cambridge | Akamai Technologies | 2014-11-23 | 12:59:37.112 Mountain View | Level 3 Co

我有一个像这样的PostgreSQL表

city_location |          isp           |   date_    |    time_     
---------------+------------------------+------------+--------------
Cambridge     | Akamai Technologies    | 2014-11-23 | 12:59:37.112
Mountain View | Level 3 Communications | 2014-11-24 | 12:59:37.112
Cambridge     | Akamai Technologies    | 2014-11-24 | 9:59:37.112
Mountain View | Level 3 Communications | 2014-11-25 | 9:59:37.112
当日期为2014-11-24,时间介于9和12之间时,如何选择ISP和城市位置

我对分钟、秒和毫秒不感兴趣。 我尝试了这个只处理日期的查询

select city_location, isp from new_markers where date_='2014-11-24';
但是,我不知道如何编写select语句来选择9到12小时之间的时间


在此方面的任何帮助都将不胜感激。谢谢你

为了实现这一点,我做了以下几点:

创建我的表:

CREATE TABLE Stuff(city_location VARCHAR(30), isp VARCHAR(50), date_ date, time_ time);
填充表格:

INSERT INTO Stuff VALUES('Cambridge', 'Akamai Technologies', '2014-11-23', '12:59:37.112');
INSERT INTO Stuff VALUES('Mountain View', 'Level 3 Communications', '2014-11-24', '12:59:37.112');
INSERT INTO Stuff VALUES('Cambridge', 'Akamai Technologies', '2014-11-24', '12:59:37.112');
INSERT INTO Stuff VALUES('Mountain View', 'Level 3 Communications', '2014-11-25', '12:59:37.112');
INSERT INTO Stuff VALUES('Cambridge', 'Akamai Technologies', '2014-11-26', '10:59:37.112');
INSERT INTO Stuff VALUES('Mountain View', 'Level 3 Communications', '2014-11-26', '10:59:37.112');
然后运行以下查询:

SELECT * FROM Stuff WHERE time_ BETWEEN '09:00:00' AND '12:00:00';
或者这些-相同的结果:

SELECT * FROM Stuff WHERE time_ BETWEEN '09:00' AND '12:00';
SELECT * FROM Stuff WHERE time_ >= '09:00' AND time_ <= '12:00';
正如您所看到的,查询会选择9到12之间的记录。加上

AND date_ = 'year-mon-day'

要筛选所需日期。

要实现此目的,我执行了以下操作:

创建我的表:

CREATE TABLE Stuff(city_location VARCHAR(30), isp VARCHAR(50), date_ date, time_ time);
填充表格:

INSERT INTO Stuff VALUES('Cambridge', 'Akamai Technologies', '2014-11-23', '12:59:37.112');
INSERT INTO Stuff VALUES('Mountain View', 'Level 3 Communications', '2014-11-24', '12:59:37.112');
INSERT INTO Stuff VALUES('Cambridge', 'Akamai Technologies', '2014-11-24', '12:59:37.112');
INSERT INTO Stuff VALUES('Mountain View', 'Level 3 Communications', '2014-11-25', '12:59:37.112');
INSERT INTO Stuff VALUES('Cambridge', 'Akamai Technologies', '2014-11-26', '10:59:37.112');
INSERT INTO Stuff VALUES('Mountain View', 'Level 3 Communications', '2014-11-26', '10:59:37.112');
然后运行以下查询:

SELECT * FROM Stuff WHERE time_ BETWEEN '09:00:00' AND '12:00:00';
或者这些-相同的结果:

SELECT * FROM Stuff WHERE time_ BETWEEN '09:00' AND '12:00';
SELECT * FROM Stuff WHERE time_ >= '09:00' AND time_ <= '12:00';
正如您所看到的,查询会选择9到12之间的记录。加上

AND date_ = 'year-mon-day'

要筛选所需日期。

还要确保当您说“9到12”时,您实际上希望包括“12:00”,而不是“12:01”,否则请使用
。。。和时间<'13:00'
完全包括12小时,或
。。。时间<'12:00'
对于12小时是完全独占的。它起作用了。我将时间和日期声明为varchar,而不是时间和日期。谢谢@Vêrace@ziggycrultyfreezeitgeister我添加了一个到Postgres docco的链接-
之间的
是包含的,这就是OPwanted@SwateshPakhare始终使用正确的数据类型。您的排序和筛选不仅无法正常工作,还可能会混淆优化程序并降低系统速度。此外,请确保当您说“9到12之间”时,您实际上希望包括“12:00”,而不是“12:01”,否则请使用
。。。和时间<'13:00'
完全包括12小时,或
。。。时间<'12:00'
对于12小时是完全独占的。它起作用了。我将时间和日期声明为varchar,而不是时间和日期。谢谢@Vêrace@ziggycrultyfreezeitgeister我添加了一个到Postgres docco的链接-
之间的
是包含的,这就是OPwanted@SwateshPakhare始终使用正确的数据类型。您的排序和筛选不仅不能正常工作,而且还可能会使优化者感到困惑,并使系统变慢。