PostgreSQL:根据2个日期列之间的日期获取行。

时间:2015-07-30 13:30:14

标签: postgresql

我有下表:

| id | duty_id |      date_start     |      date_end       |
| 1  |    1    | 2015-07-16 07:00:00 | 2015-07-16 14:30:00 |
| 2  |    3    | 2015-07-17 03:30:00 | 2015-07-17 11:00:00 |
| 3  |    5    | 2015-07-17 12:00:00 | 2015-07-17 19:30:00 |

我有一个日期:2015-07-17

我需要选择我日期发生的行。 AKA我需要这些内容:

| 2  |    3    | 2015-07-17 03:30:00 | 2015-07-17 11:00:00 |
| 3  |    5    | 2015-07-17 12:00:00 | 2015-07-17 19:30:00 |
遗憾的是BETWEEN无效:

SELECT * FROM table WHERE ('2015-07-17'::DATE BETWEEN date_start AND date_end)

返回空结果。

我怎样才能获得这些线条?

2 个答案:

答案 0 :(得分:0)

请尝试这样的事情:

SELECT * FROM table 
WHERE '2015-07-17'::DATE BETWEEN date_start::DATE AND date_end::DATE;

SQLFiddle excample

答案 1 :(得分:0)

问题在于当DATE被强制转换为TIMESTAMP时(必须在此处将'2015-07-17'的DATE与数据中的TIMESTAMP进行比较),强制TIMESTAMP的时间部分设置为00:00:00,因此测试数据没有在2015-07-17午夜有效的时间段,不会返回任何行。

如果您将211分钟(3小时31分钟)的INTERVAL文字添加到转换日期,您将获得返回的结果,因为测试数据的行有效时间为2015-07-17 03:31 AM:

SELECT * FROM my_table
  WHERE '2015-07-17'::DATE + INTERVAL '211' MINUTE BETWEEN date_start
                                                       AND date_end;

SQLFiddle here

祝你好运。