T-SQLで日、月、年を指定して日付を作成する
T-SQLでは、DATEFROMPARTS
関数を使用して、日、月、年の値から日付を作成することができます。この関数は、SQL Server 2012以降でサポートされています。
構文
DATEFROMPARTS(year, month, day)
- year: 年度の整数値。
- month: 月の整数値 (1から12)。
- day: 日の整数値 (1から31)。
例
-- 2023年12月25日の日付を作成する
DECLARE @Date DATE = DATEFROMPARTS(2023, 12, 25);
SELECT @Date; -- 結果: 2023-12-25
-- 現在の年の1月1日を計算する
DECLARE @CurrentYear INT = YEAR(GETDATE());
DECLARE @NewYearsDay DATE = DATEFROMPARTS(@CurrentYear, 1, 1);
SELECT @NewYearsDay;
注意事項
- 日付の有効性を確認するために、適切なエラー処理を実装してください。たとえば、不正な日付が入力された場合に例外を発生させることができます。
- SQL Server 2012以前のバージョンを使用している場合は、
DATEADD
関数を使用して日付を作成することもできますが、より複雑なコードが必要となります。
T-SQLで日付を作成する例
例1: 具体的な日付を作成する
-- 2023年12月25日の日付を作成する
DECLARE @Date DATE = DATEFROMPARTS(2023, 12, 25);
SELECT @Date; -- 結果: 2023-12-25
DATEFROMPARTS
関数を使用して、年、月、日の値から日付を作成しています。DECLARE @Date DATE
は、日付型の変数@Date
を宣言しています。SELECT @Date
は、変数の値を出力しています。
例2: 現在の年の1月1日を計算する
-- 現在の年の1月1日を計算する
DECLARE @CurrentYear INT = YEAR(GETDATE());
DECLARE @NewYearsDay DATE = DATEFROMPARTS(@CurrentYear, 1, 1);
SELECT @NewYearsDay;
YEAR(GETDATE())
は、現在の年の値を取得しています。
例3: 誕生日を計算する
-- 生年月日を指定して誕生日を計算する
DECLARE @BirthYear INT = 1990;
DECLARE @BirthMonth INT = 5;
DECLARE @BirthDay INT = 15;
DECLARE @Birthday DATE = DATEFROMPARTS(@BirthYear, @BirthMonth, @BirthDay);
SELECT @Birthday;
- 生年月日の値を指定して、誕生日を計算しています。
- 誕生日を計算するために、
DATEFROMPARTS
関数を使用しています。
DATEADD関数を使用する
DECLARE @Year INT = 2023;
DECLARE @Month INT = 12;
DECLARE @Day INT = 25;
DECLARE @Date DATE = DATEADD(day, @Day - 1, DATEADD(month, @Month - 1, DATEADD(year, @Year - 1900, 0)));
SELECT @Date;
- 年、月、日の値を1900年1月1日から相対的に計算しています。
文字列を日付型に変換する
DECLARE @DateString VARCHAR(10) = '2023-12-25';
DECLARE @Date DATE = CONVERT(DATE, @DateString, 120);
SELECT @Date;
- 日付を文字列として指定し、
CONVERT
関数を使用して日付型に変換しています。 - 120は、日付のフォーマットを指定するスタイルコードです。
CAST関数を使用する
DECLARE @DateString VARCHAR(10) = '2023-12-25';
DECLARE @Date DATE = CAST(@DateString AS DATE);
SELECT @Date;
CAST
関数を使用して、文字列を日付型に変換しています。
注意:
DATEADD
関数を使用する方法は、より複雑ですが、SQL Server 2012以前のバージョンでも使用できます。- 文字列を日付型に変換する方法では、日付のフォーマットが正しいことを確認する必要があります。
sql sql-server sql-server-2005