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

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

    datetimeoffsetがある場合 値ですが、時間とタイムゾーンのオフセット部分は必要ありません。日付に変換します。 (値から不要な詳細を削除しながら)多くのストレージスペースを節約します。この記事には、 datetimeoffsetの変換例が含まれています 日付の値 SQLServerの値。

    datetimeoffset データ型には、タイムゾーンオフセットのある日付と時刻が含まれます。また、0から7までの秒の部分があります(これは、割り当てられている秒の数によって異なります)。これは、datetimeoffset(n)を使用して行われます。 構文。これを指定しない場合は、7(デフォルト)が使用されます。このデータ型のストレージサイズは、使用されている精度に応じて、8、9、または10バイト(および精度を格納するための1バイト)のいずれかです。その精度は100ナノ秒です。

    日付 一方、データ型には日付のみが含まれます。時刻は含まれず、精度は1日です。ストレージに3バイトを使用します。

    datetimeoffsetを変換するとき 日付の値 データ型の場合、時間部分(タイムゾーンオフセットを含む)が失われます。ただし、ストレージサイズも固定の3バイトに減らします。もちろん、この変換は、時間部分とタイムゾーンオフセットが必要ない場合にのみ行います。

    例1-暗黙の変換

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

    DECLARE 
      @thedatetimeoffset datetimeoffset, 
      @thedate date;
    SET @thedatetimeoffset = '2025-05-21 10:15:30.1234567 +10:30';
    SET @thedate = @thedatetimeoffset;
    SELECT 
      @thedatetimeoffset AS 'datetimeoffset',
      @thedate AS 'date';
    

    結果:

    +------------------------------------+------------+
    | datetimeoffset                     | date       |
    |------------------------------------+------------|
    | 2025-05-21 10:15:30.1234567 +10:30 | 2025-05-21 |
    +------------------------------------+------------+
    

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

    ここで、日付がわかります 値には日付のみが含まれます(時間コンポーネントは含まれません)。タイムゾーンオフセットを含む時間コンポーネントが値から削除されました。

    この例では、 datetimeoffset valueはデフォルトの精度を使用します(小数点以下7桁になります)。これにより、データ型は10バイトを使用します(実際には、精度を格納する余分なバイトを数えると11バイトになります)。 日付 値はわずか3バイトを使用します。

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

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

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

    結果:

    +------------------------------------+------------+
    | datetimeoffset                     | date       |
    |------------------------------------+------------|
    | 2025-05-21 10:15:30.1234567 +10:30 | 2025-05-21 |
    +------------------------------------+------------+
    

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

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

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

    結果:

    +------------------------------------+------------+
    | datetimeoffset                     | date       |
    |------------------------------------+------------|
    | 2025-05-21 10:15:30.1234567 +10:30 | 2025-05-21 |
    +------------------------------------+------------+
    

    1. MySQLで週ごとの成長率を計算する方法

    2. SQL文字列の比較、大なり小なり演算子

    3. PostgreSQLのチューニング:パフォーマンスを向上させるための重要事項

    4. PostgreSQLからのPL/pgSQL出力をCSVファイルに保存します