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

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

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

    日付を変換するとき datetimeoffsetの値 、値に追加情報が追加されます。これは、 datetimeoffsetが原因です。 データ型には、日付と時刻の両方の情報、および時間オフセット情報が含まれます。つまり、 datetimeoffset データ型は、タイムゾーンを認識し、24時間制に基づく1日の時刻と組み合わされる日付を定義します。 日付 一方、データ型には日付情報のみが含まれます。

    日付から変換する場合 datetimeoffset 、時間(およびタイムゾーンオフセット)が値に自動的に追加されます。ただし、必要に応じていつでも値を変更できます(タイムゾーンオフセットを含む)。

    datetimeoffset データ型では、秒の小数部の精度を指定することもできます。これを指定しない場合は、7のスケールが使用されます。これは、小数点の右側に7桁が含まれることを意味します。

    例1-暗黙の変換

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

    DECLARE @thedate date, @thedatetimeoffset datetimeoffset(7)
    SET @thedate = '2020-12-01'
    SET @thedatetimeoffset = @thedate
    SELECT 
      @thedate AS 'date',
      @thedatetimeoffset AS 'datetimeoffset';
    

    結果:

    +------------+------------------------------------+
    | date       | datetimeoffset                     |
    |------------+------------------------------------|
    | 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 |
    +------------+------------------------------------+
    

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

    日付がわかります 変数には日付情報のみが含まれますが、 datetimeoffset 変数には、日付、時刻、およびタイムゾーンのオフセット情報が含まれます。

    日付の間で変換する場合 およびdatetimeoffset(7) (つまり、スケール7を使用)、時間コンポーネントは00:00:00.0000000 +00:00に設定されます 。これはデフォルト値でもあるため、精度値を省略でき、スケール7が使用されます(精度は34になります)。必要に応じて、精度を下げることができます。精度を下げると、値を格納するために必要なスペースの量も減らすことができます。

    明確にするために、スケール 数値の小数点の右側の桁数です。 精度 は数値の合計桁数です。

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

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

    DECLARE @thedate date
    SET @thedate = '2020-12-01'
    SELECT 
      @thedate AS 'date',
      CAST(@thedate AS datetimeoffset) AS 'datetimeoffset';
    

    結果:

    +------------+------------------------------------+
    | date       | datetimeoffset                     |
    |------------+------------------------------------|
    | 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 |
    +------------+------------------------------------+
    

    したがって、暗黙の変換と同じ結果が得られます。

    次のように時間を調整することもできます:

    DECLARE @thedate date
    SET @thedate = '2020-12-01'
    SELECT 
      @thedate AS 'date',
      DATEADD(hour, 7, CAST(@thedate AS datetimeoffset)) AS 'datetimeoffset';
    

    結果:

    +------------+------------------------------------+
    | date       | datetimeoffset                     |
    |------------+------------------------------------|
    | 2020-12-01 | 2020-12-01 07:00:00.0000000 +00:00 |
    +------------+------------------------------------+
    

    DATEADD()は使用できないことに注意してください タイムオフセットコンポーネントを変更する関数。でも心配しないでください。 それを変更する方法(方法については読んでください)。

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

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

    DECLARE @thedate date
    SET @thedate = '2020-12-01'
    SELECT 
      @thedate AS 'date',
      CONVERT(datetimeoffset, @thedate) AS 'datetimeoffset';
    

    結果:

    +------------+------------------------------------+
    | date       | datetimeoffset                     |
    |------------+------------------------------------|
    | 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 |
    +------------+------------------------------------+
    

    そして時間を調整する:

    DECLARE @thedate date
    SET @thedate = '2020-12-01'
    SELECT 
      @thedate AS 'date',
      DATEADD(hour, 7, CONVERT(datetimeoffset, @thedate)) AS 'datetimeoffset';
    

    結果:

    +------------+------------------------------------+
    | date       | datetimeoffset                     |
    |------------+------------------------------------|
    | 2020-12-01 | 2020-12-01 07:00:00.0000000 +00:00 |
    +------------+------------------------------------+
    

    例4–タイムオフセットの変更

    前の例では、DATEADD()を使用しました 時間値を変更する関数。この関数は、タイムオフセットコンポーネントを除く、日付または時刻コンポーネントの任意の部分を変更するために使用できます。 。

    時間オフセットを変更する必要がある場合は、TODATETIMEOFFSET()を使用できます。 働き。この関数を使用して、元の日付を変換することもできます datetimeoffsetの値 価値。この関数は、日付値を受け入れます( datetime2に解決できます 値)、およびオフセット値。

    次に例を示します:

    DECLARE @thedate date, @thedatetimeoffset datetimeoffset
    SET @thedate = '2020-12-01'
    SET @thedatetimeoffset = TODATETIMEOFFSET(@thedate, '+07:00')
    SELECT 
      @thedate AS 'date',
      @thedatetimeoffset AS 'datetimeoffset';
    

    結果:

    +------------+------------------------------------+
    | date       | datetimeoffset                     |
    |------------+------------------------------------|
    | 2020-12-01 | 2020-12-01 00:00:00.0000000 +07:00 |
    +------------+------------------------------------+
    

    SELECT内の関数を使用した例を次に示します。 ステートメント:

    DECLARE @thedate date = '2020-12-01'
    SELECT 
      @thedate AS 'date',
      TODATETIMEOFFSET(@thedate, '+07:00') AS 'datetimeoffset';
    

    結果:

    +------------+------------------------------------+
    | date       | datetimeoffset                     |
    |------------+------------------------------------|
    | 2020-12-01 | 2020-12-01 00:00:00.0000000 +07:00 |
    +------------+------------------------------------+
    

    TODATETIMEOFFSET() 関数はdatetimeoffsetも受け入れます 値を最初のパラメータとして使用することで、既存の datetimeoffsetを変更することもできます。 必要に応じて値。

    例:

    DECLARE @thedate date, @thedatetimeoffset datetimeoffset(7)
    SET @thedate = '2020-12-01'
    SET @thedatetimeoffset = @thedate
    SELECT 
      @thedate AS 'date',
      @thedatetimeoffset AS 'datetimeoffset',
      TODATETIMEOFFSET(@thedatetimeoffset, '+07:00') AS 'Modified';
    

    結果:

    +------------+------------------------------------+------------------------------------+
    | date       | datetimeoffset                     | Modified                           |
    |------------+------------------------------------+------------------------------------|
    | 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 | 2020-12-01 00:00:00.0000000 +07:00 |
    +------------+------------------------------------+------------------------------------+
    

    1. T-SQLの場合と同じように、PL / SQLで変数を宣言して使用するにはどうすればよいですか?

    2. 2つの列の組み合わせに対する一意の制約?

    3. 職場での遭遇:特大のデータベースからスペースを取り戻す

    4. PostgreSQLで中央値を計算する方法