我假设您想要基于“今天”的完整“当前年份”
MySQL
select *
from whatever
where ( create_date >= CONCAT(YEAR(CURDATE()),'-01-01')
and create_date < CONCAT(YEAR(CURDATE())+1,'-01-01')
)
测试它:
SELECT
CONCAT(YEAR(CURDATE()),'-01-01') This_year_start
, CONCAT(YEAR(CURDATE())+1,'-01-01') Next_year_start
SQL 服务器 (tsql)
select *
from whatever
where ( create_date >= DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0)
and create_date < DATEADD(YEAR, DATEDIFF(YEAR, -1, GETDATE()), 0)
)
测试它:
select
DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) , 0) This_year_start
, DATEADD(YEAR, DATEDIFF(YEAR, -1, GETDATE()), 0) Next_year_start
This_year_start Next_year_start
01.01.2016 00:00:00 01.01.2017 00:00:00
- DATEDIFF(YEAR, 0, GETDATE()) 从
基准年
- 将该年数添加到基准日期 (1900-01-01)
- DATEDIFF(YEAR, -1, GETDATE()) 计算从
基准年的前一年(比上面的数字大 1)
- 将该年数添加到基准日期 (1900-01-01)
请避免在日期范围内使用between。使用 >= 和 的组合要安全得多
例如
其中 create_date >= '2016-01-01' 和 create_date
使用这种方法,无论对 [create_date] 中的数据应用什么时间精度,您都将获得所需信息的精确范围。