我有一张场地表
# == Schema Information
#
# Table name: venues
#
# id :integer not null, primary key
# name :string default(""), not null
# address_1 :string default(""), not null
# address_2 :string
# city :string default(""), not null
# county :string default(""), not null
# postal_code :string default(""), not null
# mon_start :time
# mon_end :time
# tue_start :time
# tue_end :time
# wed_start :time
# wed_end :time
# thu_start :time
# thu_end :time
# fri_start :time
# fri_end :time
# sat_start :time
# sat_end :time
# sun_start :time
# sun_end :time
# created_at :datetime not null
# updated_at :datetime not null
有些场地的关闭时间是在午夜之后,有些则在午夜之前关闭。
我希望找到与时间now()
SELECT "venues".* FROM "venues" WHERE (mon_start <= now()::time AND mon_end > now()::time)
如果mon_end
在午夜之后,则不会返回记录。
SELECT "venues".* FROM "venues" WHERE (mon_start <= now()::time AND mon_end + interval '1 day' > now()::time)
但如果mon_end
在午夜之后,这仍然不会返回记录。
如何选择mon_start
小于现在时间的所有场地,mon_end
大于现在的时间。
e.g。 周一开始: 下午4点 周一结束: 凌晨1点 现在: 11: 30PM
我可以根据当天的名称查询正确的列吗?
e.g。如果今天是星期三,请搜索wed_start
和wed_end
答案 0 :(得分:1)
您需要使用DATE
<强> SQL DEMO 强>
WITH time_table as (
SELECT '10:30pm'::time as open_time, '01:30am'::time close_time
UNION
SELECT '09:00pm'::time as open_time, '11:30pm'::time close_time
)
SELECT open_time, close_time, now(),
now()::date + open_time as open_time,
CASE WHEN close_time > open_time
THEN now()::date + close_time
ELSE now()::date + close_time + INTERVAL '1 day'
END as close_time
FROM time_table
<强>输出强>