SQL Serverでは、T-SQL FORMAT()
を使用できます 時間をフォーマットする関数 データ・タイプ。ただし、AM / PM指定子を追加する必要がある場合は、別のデータ型を使用する必要があります。これは、時間が原因です。 データ型は特に24時間制に基づいているため、時刻はそのようにフォーマットされます。
例1-「時刻」と「日時」の比較
AM/PM指定子を使用して「時間」データ型をフォーマットしようとするとどうなるかを示す例を次に示します。
SELECT FORMAT(CAST('11:28:15' AS datetime), 'hh:mm tt') 'datetime', FORMAT(CAST('11:28:15' AS time), 'hh\:mm tt') 'time';
結果:
+------------+--------+ | datetime | time | |------------+--------| | 11:28 AM | NULL | +------------+--------+
AM / PM指定子を「時間」値に追加しようとすると、NULL
が表示されます。 。
したがって、AMまたはPMを時間データ型に追加する必要がある場合は、最初に別のデータ型に変換してからフォーマットする必要があります。
FORMAT()
に注意してください 関数は実際には結果を文字列として返します(結果がNULL
でない限り) 。
2番目の形式の文字列にバックスラッシュがある理由がわからない場合は、これは時間にのみ必要です。 データ型であり、コロン(および任意のピリオド)をエスケープするために使用されます。詳しくはこちらをご覧ください。
例2–「時刻」を「日時」に変換する
この例は、これをより現実的にしようとしていることを除いて、前の例とほとんど同じです。これでは、変数を「時間」データ型として明示的に設定してから、それをフォーマットしてみます。次に、それを「日時」としてキャストしてから、再度フォーマットします。
DECLARE @thetime time = '11:28:15' SELECT FORMAT(@thetime, 'hh\:mm tt') 'time', FORMAT(CAST(@thetime AS datetime), 'hh:mm tt') 'datetime';
結果:
+--------+------------+ | time | datetime | |--------+------------| | NULL | 11:28 AM | +--------+------------+
CONVERT()
を使用する場合 関数、これは次のようになります:
DECLARE @thetime time = '11:28:15' SELECT FORMAT(@thetime, 'hh\:mm tt') 'time', FORMAT(CONVERT(datetime, @thetime), 'hh:mm tt') 'datetime';
結果:
+--------+------------+ | time | datetime | |--------+------------| | NULL | 11:28 AM | +--------+------------+
または、値を目的のタイプの別の変数に再割り当てすることもできます:
DECLARE @thetime time = '11:28:15' DECLARE @thedatetime datetime = @thetime SELECT FORMAT(@thetime, 'hh\:mm tt') 'time', FORMAT(@thedatetime, 'hh:mm tt') 'datetime';
結果:
+--------+------------+ | time | datetime | |--------+------------| | NULL | 11:28 AM | +--------+------------+
例3–1文字のAM/PM指定子
単一のt
を使用することもできます 1文字のAM/PM指定子を指定するには:
SELECT FORMAT(CAST('11:28:15' AS datetime), 'hh:mm t') 'AM', FORMAT(CAST('23:28:15' AS datetime), 'hh:mm t') 'PM';
結果:
+---------+---------+ | AM | PM | |---------+---------| | 11:28 A | 11:28 P | +---------+---------+
例4– FORMAT()関数を使用しない場合
FORMAT()
この関数はSQLServer2012で導入されました。以前のバージョンのSQLServerを使用している場合は、別の方法を使用してAM/PM指定子を追加する必要があります。これを行う1つの方法は次のとおりです。
DECLARE @thetime time SET @thetime = '11:28:15' SELECT CONVERT(varchar(8), @thetime, 100) Result;
結果:
+----------+ | Result | |----------| | 11:28AM | +----------+
または、replace 100
を使用することもできます 0
を使用 同じ結果の場合:
DECLARE @thetime time SET @thetime = '11:28:15' SELECT CONVERT(varchar(8), @thetime, 0) Result;
結果:
+----------+ | Result | |----------| | 11:28AM | +----------+