SQL Serverで、T-SQL FORMAT()
を使用する場合 時間をフォーマットする関数 データ型の場合、フォーマット文字列内のコロンまたはピリオドをエスケープすることを忘れないでください。
これは、FORMAT()
が原因です。 関数は、コロンとピリオドをエスケープする必要があることを指示するCLRフォーマット規則に依存しています。したがって、フォーマット文字列(2番目のパラメータ)にコロンまたはピリオドが含まれている場合、入力値(最初のパラメータ)が時間の場合、コロンまたはピリオドはバックスラッシュでエスケープする必要があります。 データ・タイプ。
例1-コロンのエスケープ
FORMAT()
を使用する基本的な例を次に示します。 時間をフォーマットする関数 データ型。
SELECT FORMAT(CAST('11:28:15' AS time), 'hh\:mm') Result;
結果:
+----------+ | Result | |----------| | 11:28 | +----------+
フォーマット文字列のバックスラッシュに注意してください。
例2–期間のエスケープ
ピリオドでフォーマットする場合も同じことが当てはまります:
SELECT FORMAT(CAST('11:28:15' AS time), 'hh\.mm') Result;
結果:
+----------+ | Result | |----------| | 11.28 | +----------+
例3–エスケープなし
コロンや生理を逃がさないとどうなりますか。
SELECT FORMAT(CAST('11:28:15' AS time), 'hh:mm') 'Unescaped Colon', FORMAT(CAST('11:28:15' AS time), 'hh.mm') 'Unescaped Period';
結果:
+-------------------+--------------------+ | Unescaped Colon | Unescaped Period | |-------------------+--------------------| | NULL | NULL | +-------------------+--------------------+
NULL
を取得します どちらの場合も。
例4–日時(エスケープする必要はありません)
入力値がデータ型timeの場合にのみ、コロンとピリオドをエスケープする必要があります 。 日時の場合 (または datetime2 など)、それらをエスケープする必要はありません。
前の例を使用したが、入力値を datetime2に切り替えた場合 、何もエスケープすることなく、目的の結果を得ることができます:
SELECT FORMAT(CAST('11:28:15' AS datetime2), 'hh:mm') 'Unescaped Colon', FORMAT(CAST('11:28:15' AS datetime2), 'hh.mm') 'Unescaped Period';
結果:
+-------------------+--------------------+ | Unescaped Colon | Unescaped Period | |-------------------+--------------------| | 11:28 | 11.28 | +-------------------+--------------------+
同じことがsysdatetimeにも当てはまります :
SELECT FORMAT(SYSDATETIME(), 'hh:mm') 'Unescaped Colon', FORMAT(SYSDATETIME(), 'hh.mm') 'Unescaped Period';
結果:
+-------------------+--------------------+ | Unescaped Colon | Unescaped Period | |-------------------+--------------------| | 04:46 | 04.46 | +-------------------+--------------------+