我有下表:
| 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)
返回空结果。
我怎样才能获得这些线条?
答案 0 :(得分:0)
请尝试这样的事情:
SELECT * FROM table
WHERE '2015-07-17'::DATE BETWEEN date_start::DATE AND date_end::DATE;
答案 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;
祝你好运。