GETDATE(), MAX(), CAST(), CONVERT() を使って最大の日付を取得
MS SQL Server 2005+ で使用可能な最大の日付は、9999-12-31 23:59:59.997
です。この日付を取得するには、いくつかの方法があります。
方法
- GETDATE() 関数を使用する
SELECT GETDATE();
この方法は、現在の時刻を取得する最も簡単な方法です。ただし、現在の時刻は必ずしも最大の日付ではないことに注意してください。
SELECT MAX(date_column)
FROM table_name;
この方法は、指定された列の中で最大の日付を取得します。この方法は、日付列に空の値がある場合に注意が必要です。
- CAST() 関数と CONVERT() 関数を使用する
SELECT CAST('9999-12-31 23:59:59.997' AS datetime);
SELECT CONVERT(datetime, '9999-12-31 23:59:59.997');
これらの方法は、文字列を datetime
型に変換して、最大の日付を取得します。
注意事項
- 上記の方法は、すべて MS SQL Server 2005+ で使用できます。
- 日付列に空の値がある場合、
MAX()
関数はNULL
を返します。 CAST()
関数とCONVERT()
関数は、文字列の書式が正しくない場合、エラーを返します。
-- 現在の時刻を取得する
SELECT GETDATE();
-- 指定された列の中で最大の日付を取得する
SELECT MAX(date_column)
FROM table_name;
-- 文字列を datetime 型に変換して、最大の日付を取得する
SELECT CAST('9999-12-31 23:59:59.997' AS datetime);
SELECT CONVERT(datetime, '9999-12-31 23:59:59.997');
-- 現在の時刻を取得する
SELECT GETDATE();
-- 結果
-- 2024-04-01 02:00:00.000
-- 指定された列の中で最大の日付を取得する
SELECT MAX(date_column)
FROM table_name;
-- 結果
-- 2024-03-31 23:59:59.997
-- 文字列を datetime 型に変換して、最大の日付を取得する
SELECT CAST('9999-12-31 23:59:59.997' AS datetime);
SELECT CONVERT(datetime, '9999-12-31 23:59:59.997');
-- 結果
-- 9999-12-31 23:59:59.997
SELECT DATETIMEADD(dd, 9999, '1900-01-01');
この方法は、1900-01-01
に 9999 日を加算して、最大の日付を取得します。
SELECT DATEDIFF(dd, '1900-01-01', '9999-12-31');
システムテーブルを使用する
SELECT sys.sysmaxvalues.max_value
FROM sys.syscolumns
WHERE sys.syscolumns.name = 'date_column'
AND sys.syscolumns.id = object_id('table_name');
この方法は、sys.sysmaxvalues
システムテーブルを使用して、指定された列の最大値を取得します。
- システムテーブルを使用する方法は、上級者向けです。
-- DATETIMEADD() 関数を使用する
SELECT DATETIMEADD(dd, 9999, '1900-01-01');
-- 結果
-- 9999-12-31 23:59:59.997
-- DATEDIFF() 関数を使用する
SELECT DATEDIFF(dd, '1900-01-01', '9999-12-31');
-- 結果
-- 3652059
-- システムテーブルを使用する
SELECT sys.sysmaxvalues.max_value
FROM sys.syscolumns
WHERE sys.syscolumns.name = 'date_column'
AND sys.syscolumns.id = object_id('table_name');
-- 結果
-- 2024-03-31 23:59:59.997
sql sql-server