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

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

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

    datetimeoffsetを変換するとき 日時の値 、日付と時刻の値がコピーされ、タイムゾーンオフセットが切り捨てられます。 datetimeoffsetの分数精度の場合 値が3桁より大きい場合、値は切り捨てられます。

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

    日時 一方、データ型の小数秒部分は最大3桁です。その精度は、.000、.003、または.007秒の増分に丸められます。このデータ型にはタイムゾーンの認識がないため、タイムゾーンのオフセットはありません。そのストレージサイズは8バイトです。

    例1-暗黙の変換

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

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

    結果:

    +------------------------------------+-------------------------+
    | datetimeoffset                     | datetime                |
    |------------------------------------+-------------------------|
    | 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:15:30.123 |
    +------------------------------------+-------------------------+
    

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

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

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

    また、タイムゾーンオフセットが切り捨てられていることもわかります。 日時 データ型にはタイムゾーン認識がありません。

    この変換では、 datetimeoffset のストレージサイズが10バイト(精度を格納する追加のバイトを含めると11バイト)から減少しました。 、日時の場合は8バイト 。ただし、 datetimeoffset 値は0から2の間のスケールを使用していましたが、8バイト(精度を含めて9バイト)しか使用していませんでした。

    スケール3(日時に相当)を使用した場合 値)、ストレージサイズは9バイト(精度では10バイト)になります。ただし、その精度は日時よりも高かったでしょう。 。もちろん、日時に変換するとすぐに精度が低下します 。

    例2–精度/精度と丸め

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

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

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

    DECLARE 
      @thedatetimeoffset datetimeoffset, 
      @thedatetime datetime;
    SET @thedatetimeoffset = '2025-05-21 10:15:30.1250000 +07:00';
    SET @thedatetime = @thedatetimeoffset;
    SELECT 
      @thedatetimeoffset AS 'datetimeoffset',
      @thedatetime AS 'datetime';
    

    結果:

    +------------------------------------+-------------------------+
    | datetimeoffset                     | datetime                |
    |------------------------------------+-------------------------|
    | 2025-05-21 10:15:30.1250000 +07:00 | 2025-05-21 10:15:30.127 |
    +------------------------------------+-------------------------+
    

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

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

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

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

    結果:

    +------------------------------------+-------------------------+
    | datetimeoffset                     | datetime                |
    |------------------------------------+-------------------------|
    | 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:15:30.123 |
    +------------------------------------+-------------------------+
    

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

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

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

    結果:

    +------------------------------------+-------------------------+
    | datetimeoffset                     | datetime                |
    |------------------------------------+-------------------------|
    | 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:15:30.123 |
    +------------------------------------+-------------------------+
    

    1. Spotlight Tuning Pack Basic:最高の無料SQL最適化ツール

    2. SQL Server 2016:常に暗号化されることによるパフォーマンスへの影響

    3. サブクエリでビット単位のORを集約

    4. Oracle 12cでPBKDF2を使用するにはどうすればよいですか?