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]
)
*/
如何使用 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]
)
*/