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

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

    この記事には、日時の変換例が含まれています datetime2の値 SQLServerの値。

    日時を変換する場合 datetime2の値 、結果の値は、 datetime2に割り当てる秒の小数部の精度によって異なります。 。

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

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

    例1-暗黙の変換

    これは、日時間の暗黙的な変換の例です。 およびdatetime2

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

    結果:

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

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

    datetime2 変数の秒の小数部の精度が高くなり、最終的に 1233333 の小数部になります。 (vs 123 日時の場合 価値)。

    例2–丸め

    日時 データ型は、.000、.003、または.007秒の増分に丸められます。明示的に別の値に設定しても丸められます。ご想像のとおり、これがどのように機能するかを知らない場合、これは多くの混乱を引き起こす可能性があります。 datetime を使用すると、混乱を招く可能性があるだけではありません。 それ自体で、その値を別のデータ型に変換するときに余分な混乱を引き起こす可能性があります。

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

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

    結果:

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

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

    datetime2 ただし、値は小数秒を 1266667 に設定します 。

    ちなみに、初期値を datetime2に設定するだけの場合 そもそも、その小数部分は 1250000 を返していたでしょう。 。

    例3–精度/精度

    datetime2の利点の1つ 分数秒の精度を指定できるということです。これを行わない場合は、7を使用します(したがって、前の例では7を使用します)。

    したがって、前の例を変更して、 datetime2 値は、 datetimeと同じ秒単位の精度を使用します データ型。

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

    結果:

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

    これを行うと、 datetime2 valueは、 datetimeと同じ結果を返します 価値。また、同じ量のストレージ(8バイト)を使用します。この場合、 datetime2 値を格納するために7バイトを使用し、値の精度を格納するために1バイトを使用します。

    lessを指定することもできます 日時よりも秒単位の精度 特別な精度が必要ない場合。これを行うと、ストレージスペース( datetime2 )を1バイト節約できます。 datetime の8バイトと比較して、値は7バイトを使用します 値)。

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

    結果:

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

    これにより、秒の小数部が丸められる可能性があることに注意してください。

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

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

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

    結果:

    +-------------------------+-------------------------+
    | datetime                | datetime2(3)            |
    |-------------------------+-------------------------|
    | 2025-05-21 10:15:30.127 | 2025-05-21 10:15:30.127 |
    +-------------------------+-------------------------+
    

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

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

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

    結果:

    +-------------------------+-------------------------+
    | datetime                | datetime2(3)            |
    |-------------------------+-------------------------|
    | 2025-05-21 10:15:30.127 | 2025-05-21 10:15:30.127 |
    +-------------------------+-------------------------+
    

    Microsoftの推奨事項

    これら2つのデータ型の間に混合比較シナリオが存在する場合は常に、明示的なキャストを使用することをお勧めします。

    データベース互換性レベル130では、日時からの暗黙的な変換 datetime2 データ型は、ミリ秒の小数部を考慮することで精度が向上し、変換された値が異なります… datetime2への明示的なキャストを使用します 日時間の混合比較シナリオの場合は常にデータ型 およびdatetime2 データ型が存在します。


    1. データベース暗号化:3つのタイプとそれらが必要な理由

    2. OracleでBLOBからファイルを取得する方法は?

    3. MariaDBでサポートされている照合の完全なリスト

    4. PL / SQLで文字列を分割する機能はありますか?