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

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

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

    datetime2を変換する利点の1つ smalldatetimeの値 つまり、ストレージサイズを7、8、または9バイトから4バイトに減らします。ただし、精度は失われます。

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

    smalldatetime 一方、データ型には小数秒がなく、その秒コンポーネントは常にゼロ(:00)に設定されます。その精度は最も近い分です。

    datetime2を変換するとき smalldatetimeの値 、日付と時間部分の一部がコピーされます。秒コンポーネントはゼロに設定され(秒コンポーネントの元の値に関係なく)、時間は最も近い分に丸められます。分数秒は削除されます。

    例1-暗黙の変換

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

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

    結果:

    +-----------------------------+---------------------+
    | datetime2                   | smalldatetime       |
    |-----------------------------+---------------------|
    | 2025-05-21 10:15:30.1234567 | 2025-05-21 10:16:00 |
    +-----------------------------+---------------------+
    

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

    この例では、 smalldatetime 値には小数秒が含まれず、秒はゼロに設定され、分は切り上げられています。

    この場合、 datetime2 valueは7の精度を使用します。これは7がデフォルト値であるためです。精度を指定しなかったため、デフォルト値が使用されました。

    しかし、私が選択した精度に関係なく、同じ結果が返されます。ゼロに減らしたとしても(つまり、datetime2(0)として宣言したとしても )、それでも同じ結果が返されます。

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

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

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

    結果:

    +---------------------+---------------------+
    | datetime2           | smalldatetime       |
    |---------------------+---------------------|
    | 2025-05-21 10:15:30 | 2025-05-21 10:16:00 |
    +---------------------+---------------------+
    

    この例では、 datetime2にゼロのスケールを使用することにしました。 値(つまり、datetime2(0) )ただし、これは結果の smalldatetimeには影響しません。 値。

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

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

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

    結果:

    +---------------------+---------------------+
    | datetime2           | smalldatetime       |
    |---------------------+---------------------|
    | 2025-05-21 10:15:30 | 2025-05-21 10:16:00 |
    +---------------------+---------------------+
    

    1. SQLServerのforループの構文

    2. バイナリデータをディスクに保存するスクリプト

    3. PostgreSQL:クエリには結果データの宛先がありません

    4. SQLServerデータベースパフォーマンス監視プラットフォームが提供する必要のある上位5つの機能