您如何检查日期是否在本日历年或上一日历年之内。
IE 今年 12 月 31 日 > myDate > 去年 1 月 1 日
标准的 SQL 方式是使用 EXTRACT:
select *
from t
where extract(year from t.thedate) = extract(year from CURRENT_TIMESTAMP) or
extract(year from t.thedate) = extract(year from CURRENT_TIMESTAMP) - 1
并非所有数据库都支持这些功能;但所有人都有办法以某种方式提取日期。例如,许多支持该year
功能。
你可以做这样的事情
SELECT * FROM YourTable
WHERE TO_DATE("FROM-DATE") < DateColumn AND TO_DATE("END-DATE") > DateColumn
这是在Oracle中,很确定MySQL SQLite或其他数据库有这个功能,
对于 SQL Server,您可以使用DATEDIFF
:
WHERE DATEDIFF(year,myDate,CURRENT_TIMESTAMP) in (0,1)
DATEDIFF(year,...
有效地计算日期之间的年份转换数(或者换句话说,午夜新年前夜的数量)。
对于索引可能有助于查询的较大表,我们需要转换CURRENT_TIMESTAMP
并myDate
与这些计算值进行比较:
WHERE myDate >= DATEADD(year,DATEDIFF(year,'20010101',CURRENT_TIMESTAMP),'20000101') AND
myDate < DATEADD(year,DATEDIFF(year,'20010101',CURRENT_TIMESTAMP),'20020101')
在 SQL Server 中,您可以这样做:
DECLARE @yourDate DATETIME;
SELECT @yourDate = '2012-06-02';
SELECT CASE YEAR(@yourDate)
WHEN YEAR(GETDATE()) THEN 'Same Year'
WHEN YEAR(GETDATE()) - 1 THEN 'Last Year'
ELSE 'Other Year'
END AS YourColumn;
如果您必须查找未来日期或过去一年多的时间,您也可以轻松扩展此日期。
其他 RDBMS 将提供类似的功能来检查日期的年份。