今年の最初と最後の日付を取得するにはどうすればよいですか?


110

SQL Server 2000を使用して、今年の最初と最後の日付を取得するにはどうすればよいですか?

期待される出力:

01/01/2012 そして 31/12/2012

回答:


237
SELECT
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS EndOfYear

上記のクエリは、12月31日の初めの午前0時の日時値を示します。これは、今年の最後の瞬間から約24時間不足しています。12月31日に発生する可能性のある時間を含める場合は、翌年の最初の年と<比較して比較する必要があります。または、現在の年の最後の数ミリ秒と比較することもできますが、DATETIME以外(DATETIME2など)を使用している場合でも、ギャップが残ります。

SELECT
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS LastDayOfYear,
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, 0) AS FirstOfNextYear,
   DATEADD(ms, -3, DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, 0)) AS LastTimeOfYear

技術の詳細

これは、1900年からの年数を計算し、DATEDIFF(yy, 0, GETDATE())それをゼロの日付に追加することで機能します= 1900年1月1日。これはGETDATE()DATEDIFF(...)関数を「年-1900」

 SELECT
   DATEADD(yy, DATEDIFF(yy, 0, '20150301'), 0) AS StartOfYearForMarch2015,
   DATEADD(yy, 2015 - 1900, 0) AS StartOfYearFor2015

13

これはかなり簡単な方法です。

SELECT DATEFROMPARTS(YEAR(GETDATE()), 1, 1) AS 'First Day of Current Year';
SELECT DATEFROMPARTS(YEAR(GETDATE()), 12, 31) AS 'End of Current Year';

セクシーではありませんが、機能します。


1
SQL Serverの2012年からのみ入手可能な出発
ルーカス・

12

DATEPARTを使用して取得した現在の日付から、関数を使用して現在の年を取得できますgetUTCDate()

SELECT 
    '01/01/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate())), 
    '31/12/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate()))

1
これは日付ではなく文字列を出力します。それが本当に必要な場合はそうですが、どちらかを使用できる場合は、日付を日付として保持し、文字列として使用しないでください。
ジェイミーF

2
OPが指定していないため、SQLサーバーに設定されたデータフォームが「01/01/2012」ではなく「2012-01-01 12:13:14」のようなデータを返す可能性があります
RandyMorris

1
@RandyMorris、同意します。OPはDATETIME、文字列の代わりに取得できるかどうかを尋ねていました。明らかに、質問どおりに予想される出力と一致しない可能性があります。
Vikdor

1
あいまいな日付形式を使用するのはなぜですか(そして、回答の文字列がコメントの形式と一致しません)?yyyyMMdd明確です。
Damien_The_Unbeliever

1
@Damien_The_Unbeliever、応答のクエリは、質問に従って予想される出力と一致します。DATETIMEに関するコメントは、文字列ではなく日付の取得に関するOPのコメントへの応答です。答えはこの議論を反映していません。
Vikdor

7

単に書く:-

select convert (date,DATEADD(YEAR,DATEDIFF(YEAR,0,GETDATE()),0))

年の開始日。

select convert (date,DATEADD(YEAR, DATEDIFF(YEAR,0,GETDATE()) + 1, -1))  

4

毎年、最初の日付を最初の日付とし、最後の日付を31にします。たとえば、年をその日と月に付けるだけです。

 SELECT '01/01/'+cast(year(getdate()) as varchar(4)) as [First Day],
 '12/31/'+cast(year(getdate()) as varchar(4)) as [Last Day]

1
プログラマーが時間について信じている多くの虚偽があるので、これは必ずしも真実ではありません。
クリルガー

これがうまくいかない場合の例を誰かが教えてもらえますか?
slayernoah

@slayernoahサーバーのローカリゼーション設定によっては、エラーが発生することがあります。
ジェイミーF

3

年の最初と最後の日を取得するには、CONCAT関数を使用できます。結果の値は任意の型にキャストできます。

CONCAT(YEAR(Getdate()),'-01-01') FirstOfYear,
CONCAT(YEAR(GETDATE()),'-12-31') LastOfYear

年は機能しませんが、date_partは機能しますstart_year_date:= CONCAT(date_part( 'Y'、start_date_p):: int :: text、 '-01-01'):: date;
ボーマット

1

今年の開始日:

SELECT DATEADD(DD,-DATEPART(DY,GETDATE())+1,GETDATE())

現在の年の終了日:

SELECT DATEADD(DD,-1,DATEADD(YY,DATEDIFF(YY,0,GETDATE())+1,0))

1

別の方法:(SQL Server 2012以降)

SELECT
    DATEFROMPARTS(YEAR(GETDATE()), 1, 1) FirstDay,
    DATEFROMPARTS(YEAR(GETDATE()),12,31) LastDay

0

これをチェックしてください:

select convert(varchar(12),(DateAdd(month,(Month(getdate())-1) * -1, DateAdd(Day,(Day(getdate())-1) * -1,getdate()))),103) as StartYear,
       convert(varchar(12),DateAdd(month,12 - Month(getdate()), DateAdd(Day,(31 - Day(getdate())),getdate())),103) as EndYear


0
print Cast('1/1/' + cast(datepart(yyyy, getdate()) as nvarchar(4)) as date)

あなたのコードを説明する必要があります。多くの場合、コードダンプは反対票を投じられ、削除される場合があります。
バグ

0

特定の年のすべての操作を実行することに興味を持っているようです。これが本当に当てはまる場合は、次のようにYEAR()関数を使用することをお勧めします。

SELECT * FROM `table` WHERE YEAR(date_column) = '2012';

DAY()MONTH()についても同様です。これらはMySQL / MariaDBバリアントでも使用でき、SQL Server 2008で導入されました(特定の2000では導入されていません)。


-1
select to_date(substr(sysdate,1, 4) || '01/01'), to_date(substr(sysdate,1, 4) || '12/31') 
from dual

これはPL-SQL向けであり、SQL Server 2000の投稿によると、T-SQLを使用する必要があります。To_DateとSysdateはT-SQLには存在しません
Andrew Failor

-1

Microsoft SQL Server(T-SQL)では、次のように実行できます。

--beginning of year
select '01/01/' + LTRIM(STR(YEAR(CURRENT_TIMESTAMP)))

--end of year
select '12/31/' + LTRIM(STR(YEAR(CURRENT_TIMESTAMP)))

CURRENT_TIMESTAMP-クエリの実行時のSQLサーバーの日付を返します。

YEAR-現在のタイムスタンプの年の部分を取得します。

STRLTRIM-これらの2つの関数は、目的の接頭辞(この場合は年の最初の日付または年の最後の日付)と連結できるvarcharに変換できるように適用されます。なんらかの理由で、YEAR関数によって生成された結果にはプレフィックススペースがあります。それらを修正するには、左トリムであるLTRIM関数を使用します。


-1

1月1日に達した場合、それはまだ昨年の日付である可能性があります。

select
convert(date, DATEADD(yy, DATEDIFF(yy, 0,  DATEadd(day, -1,getdate())), 0), 103 ) AS StartOfYear,
convert(date, DATEADD(yy, DATEDIFF(yy, 0, DATEDIFF(day, -1,getdate()))+1, -1), 103 )AS EndOfYear

-2

これを試して:

DATE_FORMAT(NOW(),'01/01/%Y')
DATE_FORMAT(NOW(),'31/12/%Y')

Microsoft SQL Server。Msg 195, Level 15, State 10, Line 1 'NOW' is not a recognized function name.
jumxozizi

この答えはMySQL関数を使用します(そして日付を文字列にキャストします。これは私のおしっこの1つです)。
アルバロ・ゴンサレス

-3

---ラルムニデモ---

create table Users
(
userid int,date_of_birth date
)

---値を挿入---

insert into Users values(4,'9/10/1991')

select DATEDIFF(year,date_of_birth, getdate()) - (CASE WHEN (DATEADD(year, DATEDIFF(year,date_of_birth, getdate()),date_of_birth)) > getdate() THEN 1 ELSE 0 END) as Years, 
MONTH(getdate() - (DATEADD(year, DATEDIFF(year, date_of_birth, getdate()), date_of_birth))) - 1 as Months, 
DAY(getdate() - (DATEADD(year, DATEDIFF(year,date_of_birth, getdate()), date_of_birth))) - 1 as Days,
from users
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.