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 Serverの(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())は 基準年
- からの年数がベースに年の数を追加計算しますdate(1900-01-01)
- DATEDIFF(YEAR、-1、GETDATE())は、年より前に 年の年の年数を計算します(上記より大きい数値、1以上)
- はは、日付範囲の
between
を使用してを避けてください基準日(1900-01-01)
に年の数を追加します。 > =と<の組み合わせを使用する方がはるかに安全です。
どんなにprecsionは[CREATE_DATE]あなたがの正確な範囲を取得します内のデータに適用される何時間というアプローチでCREATE_DATE> =「2016年1月1日」とCREATE_DATE <「2017年1月1日」
、情報が要求されました。
** **日付範囲に 'between'を使用することは避けてください。http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have -in-common.aspxまたはhttps://www.experts-exchange.com/articles/11210/Beware-of-Between.html –