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

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

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

    smalldatetimeを変換するとき 時間の値 、あなたは日付を失います。時間、分、秒がコピーされます。分数秒は0に設定されます。

    smalldatetime データ型には、日付と時刻の両方が含まれます。ただし、時間には小数秒はなく、秒のコンポーネントは常にゼロ(:00)に設定されます。その精度は分単位です。そのストレージサイズは4バイトです。

    時間 一方、データ型には時間のみが含まれます。ただし、0から7までの秒の小数部の精度を指定できます。これは、 time( n )を使用して実現されます。 ) 構文、ここで n は0から7までのスケールです。これを指定しない場合、7(デフォルト)が使用され、100ナノ秒の精度が提供されます。ゼロを指定した場合(0 )、その精度は最も近い秒になります。そのストレージサイズは、小数秒の精度に応じて、3、4、または5バイト(および精度を格納するための1バイト)のいずれかになります。

    例1-暗黙の変換

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

    DECLARE 
      @thesmalldatetime smalldatetime, 
      @thetime time;
    SET @thesmalldatetime = '2025-05-21 10:15:30';
    SET @thetime = @thesmalldatetime;
    SELECT 
      @thesmalldatetime AS 'smalldatetime',
      @thetime AS 'time';
    

    結果:

    +---------------------+----------+
    | smalldatetime       | time     |
    |---------------------+----------|
    | 2025-05-21 10:16:00 | 10:16:00 |
    +---------------------+----------+
    

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

    この結果で最も明白なことは、時間 値には日付は含まれません。 時間なので、これは予想されることです。 データ型は、日付値ではなく、時刻値を格納するためだけのものです。

    ではないこと (少なくとも私の例では)明らかなのは、時間の値が実際に秒の小数部を処理できることです。私のシステムはここに秒の小数部を表示しませんが、次の例は、実際には秒の小数部の精度が7であることを示しています。

    また、よく見ると、 smalldatetime 値は、私が割り当てようとしていた実際の値から分を切り上げました。これは、 smalldatetimeの精度が比較的低いことを反映しています。 データ・タイプ。その精度は分単位です。これの明らかな結果は、最終的にその値を時間に再割り当てしたときです。 データ型。割り当てられるのは切り上げられた値であり、割り当てようとした初期値ではありません。初期値を時間に直接割り当てた場合 変数の場合、より正確な値が得られます(0のスケールを指定した場合でも)。

    意味は次のとおりです:

    DECLARE 
      @thesmalldatetime smalldatetime, 
      @thetime time(0);
    SET @thesmalldatetime = '2025-05-21 10:15:30';
    SET @thetime = '2025-05-21 10:15:30';
    SELECT 
      @thesmalldatetime AS 'smalldatetime',
      @thetime AS 'time';
    

    結果:

    +---------------------+----------+
    | smalldatetime       | time     |
    |---------------------+----------|
    | 2025-05-21 10:16:00 | 10:15:30 |
    +---------------------+----------+
    

    例2–小数秒の追加

    smalldatetime データ型には秒の小数部はありませんが、最初の例では、時間 値の秒の精度は7です(実際には小数点以下の桁数は表示されませんが)。宣言時にスケールを指定しなかったため、精度がわかります。したがって、デフォルトのスケールである7を使用します。

    時間を確認する例を次に示します。 実際、値は小数部分をサポートできます:

    DECLARE 
      @thesmalldatetime smalldatetime, 
      @thetime time;
    SET @thesmalldatetime = '2025-05-21 10:15:30';
    SET @thetime = @thesmalldatetime;
    SELECT 
      @thesmalldatetime AS 'smalldatetime',
      @thetime AS 'Original time',
      DATEADD(nanosecond, 123456700, @thetime) AS 'Modified time';
    

    結果:

    +---------------------+-----------------+------------------+
    | smalldatetime       | Original time   | Modified time    |
    |---------------------+-----------------+------------------|
    | 2025-05-21 10:16:00 | 10:16:00        | 10:16:00.1234567 |
    +---------------------+-----------------+------------------+
    

    時間のときは注意してください 値のスケールは7で、ストレージサイズは5バイトです。したがって、 smalldatetimeよりも高いストレージ要件があります タイプ(4バイトのみを使用)。

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

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

    DECLARE @thesmalldatetime smalldatetime;
    SET @thesmalldatetime = '2025-05-21 10:15:30.125';
    SELECT 
      @thesmalldatetime AS 'smalldatetime',
      CAST(@thesmalldatetime AS time(0)) AS 'time(0)';
    

    結果:

    +---------------------+-----------+
    | smalldatetime       | time(0)   |
    |---------------------+-----------|
    | 2025-05-21 10:16:00 | 10:16:00  |
    +---------------------+-----------+
    

    この例では、スケールを0に設定しました。

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

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

    DECLARE @thesmalldatetime smalldatetime;
    SET @thesmalldatetime = '2025-05-21 10:15:30.125';
    SELECT 
      @thesmalldatetime AS 'smalldatetime',
      CONVERT(time(0), @thesmalldatetime) AS 'time(0)';
    

    結果:

    +---------------------+-----------+
    | smalldatetime       | time(0)   |
    |---------------------+-----------|
    | 2025-05-21 10:16:00 | 10:16:00  |
    +---------------------+-----------+
    

    1. MariaDBJavaコネクタドライバーのパフォーマンス

    2. Oracleの数値を含む行を返す

    3. ListViewコントロールチュートリアル-02

    4. postgresでテーブル(インデックスを含む)をコピーします