如何使用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
我该怎么做?
答案 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]
)
* /