[英]SQL Selecting Dates January to July if current date is less than or equal to July
一般而言,我對sql和編程技術還很陌生,所以我不確定其語法。 我有一張桌子,我想選擇在給定學期中發生的每一行。 營業額將在1月1日和7月1日。 我希望它顯示當前年份,7月之前或7月之后的所有條目,具體取決於當前月份。 我的日期列采用sql日期格式。
如果使用的是Oracle,則可以在where子句中使用case語句,並利用以下事實:如果您未在Oracle日期中明確設置年份,則假定該年份為當前年份。
select *
from your_table
where case
when trunc(sysdate) > to_date('01-JUL', 'DD-MON') then
to_date('01-JUL', 'DD-MON')
else
to_date('01-JAN', 'DD-MON')
end < date_column;
如果當前日期大於7月1日,我將留給您使用以確保您不會獲得第一學期的成績。 一種方法是采用類似的案例陳述,但我認為有更簡潔的方法可以做到這一點。
對於MySql,您的查詢可能看起來像
SELECT *
FROM Table1
WHERE date BETWEEN CASE WHEN CURDATE() < DATE_FORMAT(CURDATE(), '%Y-08-01')
THEN DATE_FORMAT(CURDATE(), '%Y-01-01')
ELSE DATE_FORMAT(CURDATE(), '%Y-08-01') END
AND CASE WHEN CURDATE() < DATE_FORMAT(CURDATE(), '%Y-08-01')
THEN LAST_DAY(DATE_FORMAT(CURDATE(), '%Y-07-01'))
ELSE DATE_FORMAT(CURDATE(), '%Y-12-31') END
它也可以重寫為
SELECT *
FROM Table1 CROSS JOIN
(
SELECT CASE WHEN CURDATE() < DATE_FORMAT(CURDATE(), '%Y-08-01')
THEN DATE_FORMAT(CURDATE(), '%Y-01-01')
ELSE DATE_FORMAT(CURDATE(), '%Y-08-01') END start_date,
CASE WHEN CURDATE() < DATE_FORMAT(CURDATE(), '%Y-08-01')
THEN LAST_DAY(DATE_FORMAT(CURDATE(), '%Y-07-01'))
ELSE DATE_FORMAT(CURDATE(), '%Y-12-31') END end_date
) q
WHERE date BETWEEN q.start_date AND q.end_date
這是SQLFiddle演示(MySql)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.