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

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

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

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

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

    smalldatetimeを変換するとき datetime2の値 、時間と分がコピーされます。秒と小数秒は0に設定されます。

    例1-暗黙の変換

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

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

    結果:

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

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

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

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

    例2–小数部分を削除する

    必要に応じて、小数秒を削除できます。これを行うには、datetime2(0)を使用するだけです。 変数を宣言するとき。

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

    結果:

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

    したがって、この場合、両方のデータ型が同じ値を返します。ただし、違いは datetime2 smalldatetime と比較して)秒に正確さを提供する機能があります の分単位の精度)。

    例:

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

    結果:

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

    この例では、DATEADD()を使用しました 各値に30秒を追加する関数。ただし、データ型ごとに異なる結果が返されます。 datetime2 データ型は秒の部分を尊重し、100%の精度で正しい結果を提供します。 smalldatetime 一方、タイプは、最も近い分に切り上げられます(秒の部分はゼロのままです)。

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

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

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

    結果:

    +---------------------+---------------------+
    | thesmalldatetime    | datetime2(0)        |
    |---------------------+---------------------|
    | 2025-05-21 10:16:00 | 2025-05-21 10:16:00 |
    +---------------------+---------------------+
    

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

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

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

    結果:

    +---------------------+---------------------+
    | thesmalldatetime    | datetime2(0)        |
    |---------------------+---------------------|
    | 2025-05-21 10:16:00 | 2025-05-21 10:16:00 |
    +---------------------+---------------------+
    

    1. 疑わしいモードの問題でスタックしているSQLServerデータベースを効率的に解決する

    2. pipを使用した特定のパッケージバージョンのインストール

    3. CONVERT()を使用してSQLServerで1つの日付形式から別の日付形式に変換する方法

    4. ORA-16789:スタンバイREDOログが正しく構成されていません