Transact-SQLには、日付と時刻の操作に役立つ一連の関数が含まれています。日付を操作するときのより一般的なタスクの1つは、日付のさまざまな部分を抽出することです。たとえば、年または月だけが必要な場合があります。また、曜日が必要な場合もあります。いずれにせよ、SQLServerでこれを行う方法はたくさんあります。
特に、次の関数を使用すると、SQL Serverの日付から日、月、および年を返すことができます。
-
DAY()
、MONTH()
、およびYEAR()
-
DATEPART()
-
DATENAME()
-
FORMAT()
これらの機能については、以下で説明します。
DAY()、MONTH()、およびYEAR()関数
日付から日、月、年を返す最もわかりやすい方法は、同じ名前のT-SQL関数を使用することです。はい、T-SQLには、これら3つの日付部分を返すために特別に構築された関数があります。
それらがどのように機能するかの例を次に示します。
DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042'; SELECT DAY(@date) AS DAY, MONTH(@date) AS MONTH, YEAR(@date) AS YEAR;
結果:
+-------+---------+--------+ | DAY | MONTH | YEAR | |-------+---------+--------| | 2 | 6 | 2018 | +-------+---------+--------+
これらの関数は、日付部分を整数として返します。 DATEPART()
と同じ結果を返します 関数は指定された日付部分を返します。
DATEPART()関数
DATEPART()
関数は、日付の指定された部分を返すために特別に構築されました。したがって、この関数を使用して、前の例とまったく同じ結果を返すことができます。
DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042'; SELECT DATEPART(day, @date) AS DAY, DATEPART(weekday, @date) AS WEEKDAY, DATEPART(month, @date) AS MONTH, DATEPART(year, @date) AS YEAR;
結果:
+-------+-----------+---------+--------+ | DAY | WEEKDAY | MONTH | YEAR | |-------+-----------+---------+--------| | 2 | 7 | 6 | 2018 | +-------+-----------+---------+--------+
この関数を使用する利点の1つは、日付と時刻の他の部分も返すことができることです。この例でわかるように、曜日(day
)だけでなく曜日も返しました。 は月の日、weekday
曜日です)。分、秒、ミリ秒などのさまざまな時間部分を返すこともできます。その他の例については、DATEPART()
を参照してください。 SQLServerの例。
DATEPART()
関数は結果を整数として返すため、日付から月の名前または曜日の名前を取得することはできません。ただし、心配する必要はありません。DATENAME()
を使用できます。 またはFORMAT()
そのための機能。
DATENAME()関数
DATENAME()
関数はDATEPART()
に似ています 関数。ただし、結果を整数ではなく文字列として返します。 DATENAME()
また、数値ではなく、フルネームとして月と曜日を返します。
例:
DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042'; SELECT DATENAME(day, @date) AS DAY, DATENAME(weekday, @date) AS WEEKDAY, DATENAME(month, @date) AS MONTH, DATENAME(year, @date) AS YEAR;
結果:
+-------+-----------+---------+--------+ | DAY | WEEKDAY | MONTH | YEAR | |-------+-----------+---------+--------| | 2 | Saturday | June | 2018 | +-------+-----------+---------+--------+
この関数のその他の例については、DATENAME()
を参照してください。 SQLServerの例。
FORMAT()関数
FORMAT()
を使用できます DATENAME()
と同じ値を返す関数 機能など。
これは、以前の機能よりも用途の広い機能です。日付/時刻と数値を文字列としてフォーマットできます。戻り値は、 nvarcharのいずれかです。 またはnull(入力に応じて)。文字列の長さは、指定された形式によって決定されます。
FORMAT()
また、日付部分の表示方法に関するその他のオプションも提供します。 1文字、2文字、3文字、4文字、場合によっては5文字で表示するかどうかを指定できます。
実例を示します。
日
DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042'; SELECT FORMAT(@date, 'd ') AS d, FORMAT(@date, 'dd') AS dd, FORMAT(@date, 'ddd') AS ddd, FORMAT(@date, 'dddd') AS dddd;
結果:
+-----+------+-------+----------+ | d | dd | ddd | dddd | |-----+------+-------+----------| | 2 | 02 | Sat | Saturday | +-----+------+-------+----------+
月
DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042'; SELECT FORMAT(@date, 'M ') AS M, FORMAT(@date, 'MM') AS MM, FORMAT(@date, 'MMM') AS MMM, FORMAT(@date, 'MMMMM') AS MMMM;
結果:
+-----+------+-------+--------+ | M | MM | MMM | MMMM | |-----+------+-------+--------| | 6 | 06 | Jun | June | +-----+------+-------+--------+
年
DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042'; SELECT FORMAT(@date, 'y ') AS y, FORMAT(@date, 'yy') AS yy, FORMAT(@date, 'yyy') AS yyy, FORMAT(@date, 'yyyy') AS yyyy, FORMAT(@date, 'yyyyy') AS yyyyy;
結果:
+-----+------+-------+--------+---------+ | y | yy | yyy | yyyy | yyyyy | |-----+------+-------+--------+---------| | 18 | 18 | 2018 | 2018 | 02018 | +-----+------+-------+--------+---------+
年の部分を5桁でフォーマットするオプションがあることに注意してください。
桁数について
日付部分を数字形式で返す場合、フォーマット指定子は返す最小桁数を決定します。たとえば、yyy
を使用する場合 、年が0008
の場合、年は3桁で返されます ただし、年が2008
の場合は、4桁になります。 。
例:
DECLARE @date datetime2 = '0008-06-02 08:24:14.3112042'; SELECT FORMAT(@date, 'y ') AS y, FORMAT(@date, 'yy') AS yy, FORMAT(@date, 'yyy') AS yyy, FORMAT(@date, 'yyyy') AS yyyy, FORMAT(@date, 'yyyyy') AS yyyyy;
結果:
+-----+------+-------+--------+---------+ | y | yy | yyy | yyyy | yyyyy | |-----+------+-------+--------+---------| | 8 | 08 | 008 | 0008 | 00008 | +-----+------+-------+--------+---------+
また、単一のオプションを使用する場合(例:d
)日付指定子として、その日付部分のみを返す場合は、スペースを追加する必要があります。これを行わないと、その単一の日付部分よりも多くのものを取得できます。
例:
DECLARE @date datetime2 = '2008-06-02 08:24:14.3112042'; SELECT FORMAT(@date, 'd ') AS 'Space', FORMAT(@date, 'd') AS 'No Space', FORMAT(@date, 'M ') AS 'Space', FORMAT(@date, 'M') AS 'No Space', FORMAT(@date, 'y ') AS 'Space', FORMAT(@date, 'y') AS 'No Space';
結果:
+---------+------------+---------+------------+---------+------------+ | Space | No Space | Space | No Space | Space | No Space | |---------+------------+---------+------------+---------+------------| | 2 | 6/2/2008 | 6 | June 2 | 8 | June 2008 | +---------+------------+---------+------------+---------+------------+
詳細については、FORMAT()
例については、SQLServerで日付と時刻をフォーマットする方法を参照してください。