129

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

期待される出力:

01/01/201231/12/2012

4

19 に答える 19

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

上記のクエリは、12月31日の初めの深夜の日時値を示します。これは、1年の最後の瞬間よりも約24時間短い時間です。12月31日に発生する可能性のある時間を含める場合は、翌年の1日と比較して比較する必要があります<。または、今年の最後の数ミリ秒と比較することもできますが、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

その他の期間

yyこのアプローチには2つの優れた側面があります。優れたパフォーマンスと、 (= year)の両方のオカレンスを別の文字列に置き換えることで他の期間に簡単に変更できます。

yy, yyyy    year
qq, q       quarter
mm, m       month
wk, ww      week 

(週に注意してください。開始日はサーバーの設定によって異なります。)

技術の詳細

これは、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
于 2012-11-18T04:08:19.137 に答える
38

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

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

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

于 2018-10-19T20:50:24.557 に答える
12

DATEPART関数を使用して現在の年を取得できます。getUTCDate()

SELECT 
    '01/01/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate())), 
    '31/12/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate()))
于 2012-11-18T04:07:06.117 に答える
7

単に書く:-

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

その年の開始日。

select convert (date,DATEADD(YEAR, DATEDIFF(YEAR,0,GETDATE()) + 1, -1))  
于 2014-11-11T10:19:25.537 に答える
4

毎年、最初の日付として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]
于 2012-11-18T09:22:32.467 に答える
3

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

CONCAT(YEAR(Getdate()),'-01-01') FirstOfYear,
CONCAT(YEAR(GETDATE()),'-12-31') LastOfYear
于 2018-05-11T14:15:02.333 に答える
3

別の方法:(SQLServer 2012以降)

SELECT
    DATEFROMPARTS(YEAR(GETDATE()), 1, 1) FirstDay,
    DATEFROMPARTS(YEAR(GETDATE()),12,31) LastDay
于 2018-06-12T09:38:08.683 に答える
1

今年の開始日:

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

今年の終了日:

SELECT DATEADD(DD,-1,DATEADD(YY,DATEDIFF(YY,0,GETDATE())+1,0))
于 2017-02-13T14:47:52.853 に答える
1

最良の方法は、現在の年を抽出してから、次のような連結を使用することです。

SELECT CONCAT(year(now()), '-01-01') as start, -- fist day of current year
       CONCAT(year(now()), '-31-12') as end;   -- last day of current year

それはあなたに: start : 2020-01-01 and end : 2020-31-12 日付形式で与えます。

于 2020-09-21T08:16:15.223 に答える
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
于 2012-11-18T09:03:31.263 に答える
0
SELECT DATEADD(DD,-DATEPART(DY,GETDATE())+1,GETDATE())
于 2017-02-13T13:42:12.267 に答える
0
print Cast('1/1/' + cast(datepart(yyyy, getdate()) as nvarchar(4)) as date)
于 2017-06-01T20:11:56.217 に答える
0

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

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

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

于 2018-04-11T12:38:42.983 に答える
0

1年の最初の日付と最後の日付を取得するための最良の方法は

SELECT CAST(CAST(YEAR(DATEADD(YEAR,-1,GETDATE())) AS VARCHAR) + '-' + '01' + '-' + '01' AS DATE) FIRST_DATE
SELECT CAST(CAST(YEAR(DATEADD(YEAR,-1,GETDATE())) AS VARCHAR) + '-' + '12' + '-' + '31' AS DATE) LAST_DATE
于 2021-02-24T07:52:55.300 に答える
-1
select to_date(substr(sysdate,1, 4) || '01/01'), to_date(substr(sysdate,1, 4) || '12/31') 
from dual
于 2014-08-25T20:24:07.303 に答える
-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関数を使用します。

于 2018-04-29T11:10:18.853 に答える
-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
于 2018-12-20T15:58:15.923 に答える
-2

これを試して:

DATE_FORMAT(NOW(),'01/01/%Y')
DATE_FORMAT(NOW(),'31/12/%Y')
于 2016-01-12T10:23:27.343 に答える
-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
于 2013-10-08T09:44:19.833 に答える