在PostgreSQL中,如何使用一天的日期作爲輸入來獲取一週內所有日期的日期?例如,假設用戶在日曆用戶界面小部件中的某一天點擊。這突出了整個一週。Postgresql根據日曆日查詢一週的數據,不管哪一天
我想寫拉從那裏日期列日任何一天比賽中突出顯示的一週,表中的所有行的查詢,無論是否選擇週一,週三,用戶等
在PostgreSQL中,如何使用一天的日期作爲輸入來獲取一週內所有日期的日期?例如,假設用戶在日曆用戶界面小部件中的某一天點擊。這突出了整個一週。Postgresql根據日曆日查詢一週的數據,不管哪一天
我想寫拉從那裏日期列日任何一天比賽中突出顯示的一週,表中的所有行的查詢,無論是否選擇週一,週三,用戶等
你應該合併一週的和年,以使查詢在一年的結束/開始時保持穩定。例如: -
select *
from some_table
where to_char(some_date_column, 'iyyy-iw') = to_char(date '2017-06-06', 'iyyy-iw')
iyyy
和iw
是ISO week numbering。 ISO周總是在星期一開始。
或使用extract
功能:
select *
from some_table
where (extract(isoyear from some_date_column), extract(week from some_date_column))
= (extract(isoyear from date '2017-06-06'), extract(week from date '2017-06-06'))
注意extract(week ...)
始終是ISO星期。有沒有相應的「非ISO」關鍵字爲extract()
功能
你最好的辦法是date_trunc('week', ts)
,像
WHERE date_trunc('week', ts_col) = date_trunc('week', ?)
然而,這不會對ts_col
使用索引。如果ts_col
是timestamp [without time zone]
,date_trunc('week', ts_col)
只能索引。 timestamptz
(或timestamp with time zone
)不能使用基於date_trunc()
的表達式索引。但是你可以讓這個sargable有:
WHERE ts_col BETWEEN date_trunc('week', ?) AND date_trunc('week', ?) + interval '1 week'
注意date_trunc('week', ...)
使用一個星期的ISO概念,即所有的週週一開始。如果這對您不夠好,您可以調整以下表達式:date_trunc('day', ts) - interval '1 day' * extract(dow from ts)
。這將計算f.ex.星期一從週日開始。如果你不是星期天瞄準等,只需用一些數學上的表達上面,如:
select date_trunc('day', ts) - interval '1 day' * extract(dow from ts) "sunday",
date_trunc('week', ts) "monday",
date_trunc('day', ts) - interval '1 day' * ((extract(dow from ts) + 5)::int % 7) "tuesday",
date_trunc('day', ts) - interval '1 day' * ((extract(dow from ts) + 4)::int % 7) "wednesday"
你可以發佈你已經作出了嘗試? – kimdasuncion12
有一天的映射到本週剩下的日子*是否會在SQL中發生?你可以在你的應用程序的邏輯中做到這一點嗎? –
- 從時間表中選擇* clockin> current_date - interval'7 days'和employee_id = 32 - 從時間表中選擇*其中clockin> now():: date -8和employee_id = 32 order by clockin asc - select * from timetable,date_trunc('week',now():: date)其中employee_id = 32 - 選擇*,從週一提取(從clockin開始的周),從clockin開始提取(從clockin開始的月份) 32 –