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

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

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

    datetimeoffsetを変換するとき smalldatetimeの値 、日付と時刻がコピーされます。分は切り上げられ(秒の値に応じて)、秒は0に設定されます。

    datetimeoffset データ型では、0から7までの秒の小数部の精度を指定できます。これは、datetimeoffset(n)を使用して行われます。 構文。これを指定しない場合は、7(デフォルト)が使用されます。タイムゾーンオフセットもあります。このデータ型のストレージサイズは、使用されている精度に応じて、8、9、または10バイト(さらに精度は1バイト)のいずれかです。

    smalldatetime 一方、データ型にはタイムゾーンの認識がないため、タイムゾーンのオフセットは含まれていません。また、小数秒はなく、秒コンポーネントは常にゼロ(:00)に設定されます。その精度は分単位です。このデータ型のストレージサイズは4バイトに固定されています。

    例1-暗黙の変換

    これは、 datetimeoffset間の暗黙的な変換の例です。 およびsmalldatetime

    DECLARE 
      @thedatetimeoffset datetimeoffset, 
      @thesmalldatetime smalldatetime;
    SET @thedatetimeoffset = '2025-05-21 10:15:30.1234567 +07:00';
    SET @thesmalldatetime = @thedatetimeoffset;
    SELECT 
      @thedatetimeoffset AS 'datetimeoffset',
      @thesmalldatetime AS 'smalldatetime';
    

    結果:

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

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

    smalldatetime 変数には小数秒の精度がなく、その秒はゼロに設定されています。また、元の値の秒の値が30であったため、分は切り上げられました。

    もう1つの観察結果は、タイムゾーンオフセットが切り捨てられたことです– smalldatetime データ型にはタイムゾーン認識がありません。

    この変換では、 datetimeoffset のストレージサイズが10バイト(精度を計算すると11バイト)から減少しました。 、 smalldatetimeの場合は4バイトまで 。

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

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

    DECLARE @thedatetimeoffset datetimeoffset;
    SET @thedatetimeoffset = '2025-05-21 10:15:30.1234567 +07:00';
    SELECT 
      @thedatetimeoffset AS 'datetimeoffset',
      CAST(@thedatetimeoffset AS smalldatetime) AS 'smalldatetime';
    

    結果:

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

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

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

    DECLARE @thedatetimeoffset datetimeoffset;
    SET @thedatetimeoffset = '2025-05-21 10:15:30.1234567 +07:00';
    SELECT 
      @thedatetimeoffset AS 'datetimeoffset',
      CONVERT(smalldatetime, @thedatetimeoffset) AS 'smalldatetime';
    

    結果:

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

    1. MariaDBでのINSERT()関数のしくみ

    2. SQLServerの既存の列にIDプロパティを追加するにはどうすればよいですか

    3. 12cのSQL​​Tは統計を収集できません

    4. Oracle PL / SQL:データを表からCSVにエクスポート