web-dev-qa-db-ja.com

今年の最初と最後の日付を取得する方法?

SQL Server 2000を使用して、今年の最初と最後の日付を取得する方法を教えてください。

期待される出力:

01/01/201231/12/2012

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

上記のクエリは、12月31日の初めの真夜中の日時値を示します。これは、年の最後の瞬間から約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()部分を置き換えることによって任意の日付に機能するように変更できます。 "Year - 1900"のDATEDIFF(...)関数

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

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

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

単に書いてください: -

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

その年の開始日。

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

毎年、最初の日として1番目、最後の日として31日があります。年をその日と月に添付するだけです。

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

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

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

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

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

セクシーではありませんが、うまくいきます。

2
Aubrey Love

今年の開始日の場合:

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

当年度の終了日の場合:

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

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関数を使います。

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

あなたが与えられた年の間すべての操作を実行することに興味を持っているように見えます、これが本当にそうであるならば、私は YEAR() 関数はこのようになります。

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

同じことが DAY() および MONTH() にも言えます。それらはMySQL/MariaDBの亜種でも利用可能で、SQL Server 2008で導入されました(そのため、特定の2000用ではありません)。

0
chjortlund
SELECT DATEADD(DD,-DATEPART(DY,GETDATE())+1,GETDATE())
0
DHANA LAKSHMI

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

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
NeverHopeless
print Cast('1/1/' + cast(datepart(yyyy, getdate()) as nvarchar(4)) as date)
0
zadeveloper

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

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