2016-10-27 1 views
0

レポートを手動で更新することなく、毎年特定の日付に実行する日付変数を設定するのに役立つ人がいるかどうかだけです。日付の書式を変数に設定

たとえば、以下のように日付をハードコードしましたが、2017年に入ると日付が2017年に変更されるように日付形式を設定できるかどうか疑問に思っていました。私は毎年の日付形式を設定する方法があると推測します。私はちょうどその方法がわかりません。

これは設定したハードコードされた変数です。 不適切な日付範囲を以下のように変更しました。

set @start_date = '2016-01-02'; 
set @end_date = '2017-01-01'; 

以下はwhere句にも含まれています。

and create_date between @start_date and @end_date 
+0

** **日付範囲に '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 –

答えて

0

あなたの範囲は1月1日を除き、年間ですべての日をカバーしています。あなたは単に日と月を確認することができます:

WHERE NOT (DAY(create_date) = 1 AND MONTH(create_date) = 1) 
0

ここに行きます。

declare @s datetime, @e datetime 
set @s=cast(cast(year(getdate()) as char(4))+'-01-02' as date) 
set @e=cast(cast(year(getdate()) as char(4))+'-12-31' as date) 
select @s,@e 

よろしく、
カルティク

0

セット@start_date = CAST(DATETIME AS NVARCHAR AS CAST(YEAR(GETDATE())(4))+ '0102')。

現在の年の終わりを取得する

SETの@end_date = DATEADD(日、-1、DATEADD(月、13 - MONTH(GETDATE())、DATEADD(日、1 - DAY(GETDATE()) 、getdate())));私はあなたが "今日" に基づいFULL "現在の年" をしたいと仮定し

0


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日」

、情報が要求されました。