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

SQL Server(T-SQL)で「時刻」を「日時」に変換する例

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

    時間を変換するとき 日時の値 、値に追加情報が追加されます。これは、日時が原因です データ型には、日付と時刻の両方の情報が含まれます。 時間 一方、データ型には時間情報のみが含まれます。したがって、このような変換を実行すると、日付情報が値に追加されます。具体的には、日付は「1900-01-01」に設定されています。

    例1-CAST()を使用した明示的な変換

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

    DECLARE @thetime time
    SET @thetime = '23:15:59.004007'
    SELECT 
      @thetime AS 'time',
      CAST(@thetime AS datetime) AS 'datetime';
    

    結果:

    +------------------+-------------------------+
    | time             | datetime                |
    |------------------+-------------------------|
    | 23:15:59.0040070 | 1900-01-01 23:15:59.003 |
    +------------------+-------------------------+
    

    時間から変換する場合 日時へ 、日付コンポーネントは1900-01-01に設定されます 。

    また、時間値自体は、これらのデータ型の両方で異なって表示されることに注意してください。 時間 データ型は末尾にゼロを追加します(精度が高いため、デフォルトのスケールは7です)。一方、日時 値は低いスケールを使用し、.000、.003、または.007秒の増分に丸められます。これに問題がある場合は、 datetime2に変換することを検討してください 代わりは。

    例2–低精度/スケール

    前の例では、時間 値の秒数の精度は、日時よりも高くなりました。 価値。これは、デフォルトのスケール7を使用しているためです。ただし、必要に応じて、これをより低い値に変更できます。

    明確にするために、スケール 数値の小数点の右側の桁数です。 精度 は、数値の合計桁数です。データ型に角かっこで囲まれた数字を追​​加することで、スケールを指定できます。

    時刻を明示的に設定するとどうなりますか 低いを持つ値 日時よりもスケール 価値。

    DECLARE @thetime time(0)
    SET @thetime = '23:15:59.004007'
    SELECT 
      @thetime AS 'time',
      CAST(@thetime AS datetime) AS 'datetime';
    

    結果:

    +----------+-------------------------+
    | time     | datetime                |
    |----------+-------------------------|
    | 23:15:59 | 1900-01-01 23:15:59.000 |
    +----------+-------------------------+
    

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

    これは最初の例と同じですが、今回はCONVERT()を使用します。 CAST()の代わりに関数 。

    DECLARE @thetime time
    SET @thetime = '23:15:59.004007'
    SELECT 
      @thetime AS 'time',
      CONVERT(datetime, @thetime) AS 'datetime';
    

    結果:

    +------------------+-------------------------+
    | time             | datetime                |
    |------------------+-------------------------|
    | 23:15:59.0040070 | 1900-01-01 23:15:59.003 |
    +------------------+-------------------------+
    

    例4–暗黙の変換

    これは同じことを行う例ですが、暗黙的な型変換を使用しています。

    DECLARE @thetime time, @thedatetime datetime
    SET @thetime = '23:15:59.004007'
    SET @thedatetime = @thetime
    SELECT 
      @thetime AS 'time',
      @thedatetime AS 'datetime';
    

    結果:

    +------------------+-------------------------+
    | time             | datetime                |
    |------------------+-------------------------|
    | 23:15:59.0040070 | 1900-01-01 23:15:59.003 |
    +------------------+-------------------------+
    

    したがって、明示的な変換であるか暗黙的な変換であるかに関係なく、同じ結果が得られます。

    明示的に変換するために変換関数を使用していないため、これは暗黙的な変換です。あるデータ型の変数から別のデータ型の変数に値を割り当てるだけです。この場合、時間を割り当てようとすると、SQLServerはバックグラウンドで暗黙的な変換を実行します。 日時の値 変数。

    例5–日付を変更する

    日付を変更する必要がある場合(ただし、同じ時刻を維持する必要がある場合)は、DATEADD()を使用できます。 働き。

    DECLARE @thetime time, @thedatetime datetime
    SET @thetime = '23:15:59.004007'
    SET @thedatetime = @thetime
    SET @thedatetime = DATEADD(year, 120, @thedatetime)
    SELECT 
      @thetime AS 'time',
      @thedatetime AS 'datetime';
    

    結果:

    +------------------+-------------------------+
    | time             | datetime                |
    |------------------+-------------------------|
    | 23:15:59.0040070 | 2020-01-01 23:15:59.003 |
    +------------------+-------------------------+
    

    この場合、年の値に120を追加すると、2020年になります。


    1. Postgresqlのwhere句でAlias列を使用する

    2. ループせずにphpとmysqlを使用してスコアテーブルから誰かの「ランク」を取得する最善の方法

    3. MySQLはデータベースのユーザーに特権を付与します

    4. SQL Server(T-SQL)でデータベースの照合を表示する方法