sql >> データベース >  >> RDS >> Sqlserver

SQL Server(T-SQL)でTIMEデータ型をフォーマットするときはこれを覚えておいてください

    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              |
    +-------------------+--------------------+
    

    1. モデルで使用されているLaravelの生のDBクエリにパラメーターをバインドするにはどうすればよいですか?

    2. SQLServer2019でMDFファイルを管理する

    3. SQL列の区切り値を複数の行に分割する

    4. MySQLのLENGTH()とは何ですか?