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

SQL Serverで「time」を「smalldatetime」に変換する(T-SQLの例)

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

    時間を変換するとき smalldatetimeの値 、日付は「1900-01-01」に設定され、時間と分の値は切り上げられます。秒と小数秒は0に設定されます。

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

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

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

    結果:

    +------------------+---------------------+
    | time             | smalldatetime       |
    |------------------+---------------------|
    | 23:15:59.1234567 | 1900-01-01 23:16:00 |
    +------------------+---------------------+
    

    そのため、日付部分が追加されて「1900-01-01」に設定されます。この場合、分の値は切り上げられ、秒は0に設定されます。

    Microsoftのドキュメントには、小数秒もゼロに設定されていると記載されていますが、 smalldatetime とにかく、データ型には小数秒は含まれていません。

    ちなみに、 smalldatetimeを使用するときはいつでも データ型の場合、秒コンポーネントは常に0に設定されます。

    例2–時間を切り上げる

    切り上げられる時間の例を次に示します。

    DECLARE @thetime time(0);
    SET @thetime = '10:59:59';
    SELECT 
      @thetime AS 'time',
      CAST(@thetime AS smalldatetime) AS 'smalldatetime';
    

    結果:

    +----------+---------------------+
    | time     | smalldatetime       |
    |----------+---------------------|
    | 10:59:59 | 1900-01-01 11:00:00 |
    +----------+---------------------+
    

    この場合、時間値に0のスケールも指定しましたが、これは結果に影響しません。

    明確にするために、スケール 数値の小数点の右側の桁数です。 精度 は、数値の合計桁数です。スケール0を指定すると、小数部が含まれないことを意味します。

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

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

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

    結果:

    +------------------+---------------------+
    | time             | smalldatetime       |
    |------------------+---------------------|
    | 23:15:59.1234567 | 1900-01-01 23:16:00 |
    +------------------+---------------------+
    

    例4–暗黙の変換

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

    DECLARE @thetime time, @thesmalldatetime smalldatetime;
    SET @thetime = '23:15:59.1234567';
    SET @thesmalldatetime = @thetime;
    SELECT 
      @thetime AS 'time',
      @thesmalldatetime AS 'smalldatetime';
    

    結果:

    +------------------+---------------------+
    | time             | smalldatetime       |
    |------------------+---------------------|
    | 23:15:59.1234567 | 1900-01-01 23:16:00 |
    +------------------+---------------------+
    

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

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

    例5–日付を変更する

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

    DECLARE @thetime time, @thesmalldatetime smalldatetime;
    SET @thetime = '23:15:59.1234567';
    SET @thesmalldatetime = @thetime;
    SET @thesmalldatetime = DATEADD(year, 85, @thesmalldatetime);
    SELECT 
      @thetime AS 'time',
      @thesmalldatetime AS 'smalldatetime';
    

    結果:

    +------------------+---------------------+
    | time             | smalldatetime       |
    |------------------+---------------------|
    | 23:15:59.1234567 | 1985-01-01 23:16:00 |
    +------------------+---------------------+
    

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

    ただし、 smalldatetime に注意してください 非常に狭い日付範囲(1900-01-01から2079-06-06)をサポートしているため、年に追加しすぎると、次のようなオーバーフローエラーが発生する可能性があります。

    DECLARE @thetime time, @thesmalldatetime smalldatetime;
    SET @thetime = '23:15:59.1234567';
    SET @thesmalldatetime = @thetime;
    SET @thesmalldatetime = DATEADD(year, 220, @thesmalldatetime);
    SELECT 
      @thetime AS 'time',
      @thesmalldatetime AS 'smalldatetime';
    

    結果:

    Adding a value to a 'smalldatetime' column caused an overflow.
    

    1. アプリケーションユーザーと行レベルのセキュリティ

    2. スプレッドシートとデータベース:切り替える時が来ましたか?パート2

    3. PLSQLを使用してOracleテーブルからExcelにデータをエクスポートする

    4. カテゴリごとに上位10件のレコードを選択