SQL - 仅获取当年的结果

SQL - Get result of current year only

如何使用 SQL 获取当年的结果?

我有一个 table,它有一个格式为 yyyy-mm-dd.

的日期列

现在,我想 select 只查询 returns 当前年份的结果。

伪代码应该是这样的:

select * from table where date is (current year dates)

结果应该如下:

id date
2  2015-01-01
3  2015-02-01
9  2015-01-01
6  2015-02-01

我该怎么做?

使用 YEAR() 仅获取您要使用的日期的年份:

select * from table where YEAR(date) = YEAR(CURDATE())
SELECT
    date
FROM
    TABLE
WHERE
    YEAR (date) = YEAR (CURDATE());
SELECT id, date FROM your_table WHERE YEAR( date ) = YEAR( CURDATE() )

使用 WHERE YEAR(date) = YEAR(CURDATE()) 是正确的,但它不能在列 date 上使用索引(如果存在);如果它不存在,它应该存在。

更好的解决方案是:

SELECT *
FROM tbl
WHERE `date` BETWEEN '2015-01-01' AND '2015-12-31'

需要从客户端代码生成日期(一年的第一天和最后一天)。

您可以使用 SQL DATE_FORMATE() 执行此操作。如下所示:

SELECT
    date
FROM
    TABLE
WHERE
    DATE_FORMAT(date, '%Y') = YEAR (CURDATE());

当我在 SQL 服务器上尝试这些答案时,我收到一条错误消息,提示 curdate() 不是可识别的函数。

如果您遇到同样的错误,使用 getdate() 而不是 curdate() 应该可以!

--=========获取当前年份===========

Select DATEPART(yyyy, GETDATE()) 

如果日期字段包含时间部分,您想要包括 12 月 31 日,那么您必须转到下一年的 1 月 1 日。您也不必使用代码将日期插入 SQL。您可以使用以下

SELECT * FROM table 
WHERE date BETWEEN MAKEDATE(YEAR(CURDATE()), 1) AND MAKEDATE(YEAR(CURDATE())+1, 1)

这将为您提供当年的 1 月 1 日到次年 1 月 1 日的午夜。

正如@Clockwork-Muse 指出的那样,如果日期字段不包含时间部分,您可能希望使用

排除次年的 1 月 1 日
WHERE date >= MAKEDATE(YEAR(CURDATE()), 1) AND date < MAKEDATE(YEAR(CURDATE())+1, 1)
SELECT [ID]
       ,[datefield]
FROM [targettable]
WHERE DATEPART(YYYY, [datefield]) = (SELECT TOP 1(MAX(DATEPART(YYYY, [datefield])))
                                FROM [targettable]
                               )
/*
This will find the newest records in the table regardless of how recent the last time data was entered.
 To grab the oldest records from the table do this
   SELECT [ID]
       ,[datefield]
   FROM [targettable]
   WHERE DATEPART(YYYY, [datefield]) = (SELECT TOP 1(MIN(DATEPART(YYYY, [datefield])))
                                       FROM [targettable]
                                       )

*/