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

SQL Serverで「datetime2」を「datetime」に変換します(T-SQLの例)

    datetime2を変換するユースケースはおそらくほとんどありません。 日時の値 SQLServerで。特に、 datetime2 datetimeと同じストレージサイズを使用するようにデータ型を設定できます 、ただし、より高い精度で。したがって、ほとんどの場合、 datetime2を使用したほうがよいでしょう。 日時よりも 。 datetime2の使用もお勧めします 日時の代わりに 。

    ただし、この変換を実行する必要がある状況に陥った場合に備えて、この記事には、役立つ可能性のあるいくつかの例と考慮事項が含まれています。

    datetime2を変換するとき 日時の値 、結果の値は、 datetime2に割り当てられた小数秒によって異なります。 値とその精度。

    datetime2 データ型では、0から7までの秒の小数部の精度を指定できます。これを指定しない場合は、7(デフォルト)が使用されます。

    日時 一方、データ型は、小数秒の部分で最大3桁です。その精度は、.000、.003、または.007秒の増分に丸められます。

    したがって、 datetime2 スケール3を使用すると、結果の値は元の値に非常に近くなります(同一でない場合)。ただし、日時の精度が低いため 、実行する丸めのため、結果が異なる場合があります。

    例1-暗黙の変換

    datetime2間の暗黙的な変換の例を次に示します。 および日時

    DECLARE 
      @thedatetime2 datetime2, 
      @thedatetime datetime;
    SET @thedatetime2 = '2025-05-21 10:15:30.1234567';
    SET @thedatetime = @thedatetime2;
    SELECT 
      @thedatetime2 AS 'datetime2',
      @thedatetime AS 'datetime';
    

    結果:

    +-----------------------------+-------------------------+
    | datetime2                   | datetime                |
    |-----------------------------+-------------------------|
    | 2025-05-21 10:15:30.1234567 | 2025-05-21 10:15:30.123 |
    +-----------------------------+-------------------------+
    

    明示的に変換するために変換関数(以下のような)を使用していないため、これは暗黙的な変換です。この場合、 datetime2 を割り当てようとすると、SQLServerはバックグラウンドで暗黙的な変換を実行します。 日時の値 変数。

    日時がわかります 変数の秒の小数部の精度は低く、 123 の小数部になります。 元の小数部分は 1234567 でしたが 。

    この場合、丸めは実行されませんでした。

    例2–精度/精度と丸め

    日時 データ型は、.000、.003、または.007秒の増分に丸められます。明示的に別の値に設定しても丸められます。

    これは、別のデータ型(ここで行っていることなど)から変換する場合にも当てはまります。

    これが私の意味を示す例です。

    DECLARE 
      @thedatetime2 datetime2, 
      @thedatetime datetime;
    SET @thedatetime2 = '2025-05-21 10:15:30.1256789';
    SET @thedatetime = @thedatetime2;
    SELECT 
      @thedatetime2 AS 'datetime2',
      @thedatetime AS 'datetime';
    

    結果:

    +-----------------------------+-------------------------+
    | datetime2                   | datetime                |
    |-----------------------------+-------------------------|
    | 2025-05-21 10:15:30.1256789 | 2025-05-21 10:15:30.127 |
    +-----------------------------+-------------------------+
    

    この例では、 datetime2の秒の小数部を設定します 1256789への値 ただし、日時 127 に切り上げました (.000、.003、または.007秒の増分にのみ丸めることができるため)。

    datetime2 にわずか3秒しか割り当てない場合でも、これは引き続き当てはまることに注意してください。 価値。

    例:

    DECLARE 
      @thedatetime2 datetime2(3), 
      @thedatetime datetime;
    SET @thedatetime2 = '2025-05-21 10:15:30.125';
    SET @thedatetime = @thedatetime2;
    SELECT 
      @thedatetime2 AS 'datetime2',
      @thedatetime AS 'datetime';
    

    結果:

    +-------------------------+-------------------------+
    | datetime2               | datetime                |
    |-------------------------+-------------------------|
    | 2025-05-21 10:15:30.125 | 2025-05-21 10:15:30.127 |
    +-------------------------+-------------------------+
    

    また、元の datetime2に発生する可能性のある丸めに注意することも重要です。 価値。 datetime2 独自のスケールよりも秒数が多い値を割り当てようとすると、値自体が切り上げられる可能性があります。

    例:

    DECLARE 
      @thedatetime2 datetime2(3), 
      @thedatetime datetime;
    SET @thedatetime2 = '2025-05-21 10:15:30.1256789';
    SET @thedatetime = @thedatetime2;
    SELECT 
      @thedatetime2 AS 'datetime2',
      @thedatetime AS 'datetime';
    

    結果:

    +-------------------------+-------------------------+
    | datetime2               | datetime                |
    |-------------------------+-------------------------|
    | 2025-05-21 10:15:30.126 | 2025-05-21 10:15:30.127 |
    +-------------------------+-------------------------+
    

    この場合、 1256789 の小数部分で値を割り当てようとします 。ただし、 datetime2(3) 値のスケールは3のみで、小数点以下3桁しかサポートできません。この場合、最後の桁は切り上げられます(次の桁が5以上であるため)。

    両方のdatetime2(3) および日時 同じ量のストレージスペース(8バイト)を使用します。 datetime2(3) データ型は実際にはデータを格納するために7バイトを使用しますが、精度を格納するために追加の1バイトを使用します。

    例3– CAST()を使用した明示的な変換

    明示的な変換の例を次に示します。この場合、私はCAST()を使用します SELECT内で直接機能します datetime2間で明示的に変換するステートメント および日時

    DECLARE @thedatetime2 datetime2;
    SET @thedatetime2 = '2025-05-21 10:15:30.1234567';
    SELECT 
      @thedatetime2 AS 'datetime2',
      CAST(@thedatetime2 AS datetime) AS 'datetime';
    

    結果:

    +-----------------------------+-------------------------+
    | datetime2                   | datetime                |
    |-----------------------------+-------------------------|
    | 2025-05-21 10:15:30.1234567 | 2025-05-21 10:15:30.123 |
    +-----------------------------+-------------------------+
    

    例4– CONVERT()を使用した明示的な変換

    CONVERT()を使用した明示的な変換の例を次に示します。 CAST()の代わりに関数 。

    DECLARE @thedatetime2 datetime2;
    SET @thedatetime2 = '2025-05-21 10:15:30.1234567';
    SELECT 
      @thedatetime2 AS 'datetime2',
      CONVERT(datetime, @thedatetime2) AS 'datetime';
    

    結果:

    +-----------------------------+-------------------------+
    | datetime2                   | datetime                |
    |-----------------------------+-------------------------|
    | 2025-05-21 10:15:30.1234567 | 2025-05-21 10:15:30.123 |
    +-----------------------------+-------------------------+
    

    1. 単一のSQLステートメントを使用して複数のmax()値を選択する

    2. SQLServerのトップ5データモデリングツール

    3. MySQLの日付形式指定子のリスト

    4. MySQLで末尾の空白を削除する方法