SQL - 仅获取当前年度的结果

时间:2015-01-02 16:45:03

标签: mysql sql date

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

我的表格的列日期格式为yyyy-mm-dd

现在,我想做一个只返回当前年度结果的select查询。

伪代码应该是:

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

我该怎么做?

9 个答案:

答案 0 :(得分:29)

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

select * from table where YEAR(date) = YEAR(CURDATE())

答案 1 :(得分:8)

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

更好的解决方案是:

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

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

答案 2 :(得分:1)

SELECT id, date FROM your_table WHERE YEAR( date ) = YEAR( CURDATE() )

答案 3 :(得分:0)

SELECT
    date
FROM
    TABLE
WHERE
    YEAR (date) = YEAR (CURDATE());

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

当我在SQL Server上尝试这些答案时,出现一个错误,提示curdate()不是可识别的函数。

如果您遇到相同的错误,则使用getdate()代替curdate()应该可以!

答案 6 :(得分:0)

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

Select DATEPART(yyyy, GETDATE()) 

答案 7 :(得分:0)

如果日期字段包含时间部分,则要包括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)

答案 8 :(得分:0)

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]
                                       )

* /