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

SQL Server(T-SQL)でAM/PMを時間値に追加する方法

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

    1. テーブルの外部キーを一覧表示する方法

    2. イミディエイトウィンドウの高速でダーティなForループ

    3. ログインで要求されたデータベーステストを開くことができません。ログインに失敗しました。ユーザー'xyz\ASPNET'のログインに失敗しました

    4. PDOにLIKEクエリを実装する