SQL Serverでは、DATEADD()
を使用できます。 指定された期間を指定された日付に追加する関数。また、指定した期間を減算するために使用することもできます。
DATEADD()
を組み合わせることもできます 必要に応じて日付をフォーマットする他の機能を使用します。たとえば、「2020-10-03」を取得し、10年を追加してから、(増加した)年のコンポーネントを返すことができます。
この記事には、デモンストレーションの例が含まれています。
構文
DATEADD()
の構文 このようになります:
DATEADD (datepart , number , date )
datepart
増やす(または減らす)日付の一部であるnumber
datepart
を増やす量です by、およびdate
追加が行われる日付です。
例1
日付に10年を追加する基本的な例は次のとおりです。
SELECT DATEADD(year, 10, '2020-10-03') AS 'Future Date';
結果:
+-------------------------+ | Future Date | |-------------------------| | 2030-10-03 00:00:00.000 | +-------------------------+
この場合、戻り値には、日付だけでなく時間コンポーネントも含まれます。これは、結果が日時として返されるためです。 価値。このデータ型として返される理由は、date
として文字列リテラルを指定したためです。 口論。日付として文字列リテラルを指定する場合、DATEADD()
日時を返します 値。
文字列リテラルを指定しない場合、戻り値はdate
のデータ型と同じです。 口論。たとえば、 datetime2を指定した場合 引数の場合、戻り値は datetime2になります 。
例2–結果のフォーマット
上記の結果を取得し、FORMAT()
でフォーマットできます。 機能:
SELECT FORMAT(DATEADD(year, 10, '2020-10-03'), 'yyyy-MM-dd') AS 'yyyy-MM-dd', FORMAT(DATEADD(year, 10, '2020-10-03'), 'dd/MM/yyyy') AS 'dd/MM/yyyy', FORMAT(DATEADD(year, 10, '2020-10-03'), 'yyyy') AS 'yyyy', FORMAT(DATEADD(year, 10, '2020-10-03'), 'yy') AS 'yy';
結果:
+--------------+--------------+--------+------+ | yyyy-MM-dd | dd/MM/yyyy | yyyy | yy | |--------------+--------------+--------+------| | 2030-10-03 | 03/10/2030 | 2030 | 30 | +--------------+--------------+--------+------+
ただし、FORMAT()
に注意することが重要です。 関数は結果を文字列として返します。
もう1つのオプションは、CONVERT()
を使用することです。 結果を日付に変換します データ型:
SELECT CONVERT(date, DATEADD(year, 10, '2020-10-03')) AS Converted;
結果:
+-------------+ | Converted | |-------------| | 2030-10-03 | +-------------+
または、YEAR()
のような関数を使用できます 、結果を整数として返します:
SELECT YEAR(DATEADD(year, 10, '2020-10-03')) AS 'Future Year';
結果:
+---------------+ | Future Year | |---------------| | 2030 | +---------------+
例3–日付の減算
負の数を使用して、日付から減算できます:
SELECT DATEADD(year, -10, '2020-10-03') AS 'Earlier Date';
結果:
+-------------------------+ | Earlier Date | |-------------------------| | 2010-10-03 00:00:00.000 | +-------------------------+
そしてもちろん、前述の方法のいずれかを使用してこれをフォーマットできます。
例4–システム日付
さまざまな関数を使用して、SQLServerのインスタンスが実行されているコンピューターから現在の日付/時刻を返す例を次に示します。
SYSDATETIME()
SELECT SYSDATETIME() AS 'Current Date', DATEADD(year, 10, SYSDATETIME()) AS 'Future Date';
結果:
+-----------------------------+-----------------------------+ | Current Date | Future Date | |-----------------------------+-----------------------------| | 2018-06-04 05:57:51.7297042 | 2028-06-04 05:57:51.7297042 | +-----------------------------+-----------------------------+
SYSDATETIMEOFFSET()
SELECT SYSDATETIME() AS 'Current Date', DATEADD(year, 10, SYSDATETIME()) AS 'Future Date';
結果:
+--------------------------+--------------------------+ | Current Date | Future Date | |--------------------------+--------------------------| | 4/6/18 6:02:07 am +00:00 | 4/6/28 6:02:07 am +00:00 | +--------------------------+--------------------------+
前述のように、これらの結果はdate
のデータ型を使用して返されます 引数(文字列リテラルではないため)。
出力のフォーマット
SELECT YEAR(SYSDATETIME()) AS 'Current Year', YEAR(DATEADD(year, 10, SYSDATETIME())) AS 'Future Year';
結果:
+----------------+---------------+ | Current Year | Future Year | |----------------+---------------| | 2018 | 2028 | +----------------+---------------+
また、前述のように、日付をフォーマットすると、該当する関数のデータ型で返されます。したがって、この例では、結果は intとして返されます。 。 FORMAT()
でフォーマットした場合 関数の場合、文字列として返されます。