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

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

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

    smalldatetimeを変換するとき 日時の値 、時間と分がコピーされ、秒と小数秒が0に設定されます。 。

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

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

    DECLARE @thesmalldatetime smalldatetime
    SET @thesmalldatetime = '2031-03-25 11:15:29'
    SELECT 
      @thesmalldatetime AS 'thesmalldatetime',
      CAST(@thesmalldatetime AS datetime) AS 'datetime';
    

    結果:

    +---------------------+-------------------------+
    | thesmalldatetime    | datetime                |
    |---------------------+-------------------------|
    | 2031-03-25 11:15:00 | 2031-03-25 11:15:00.000 |
    +---------------------+-------------------------+
    

    まず、 thesmalldatetime 値は00を使用します 29に明示的に設定した場合でも、秒コンポーネントの場合 。これは、 thesmalldatetimeを使用する場合 データ型の場合、秒は常にゼロです(小数秒は含まれません)。

    したがって、値を datetimeに変換すると 、秒の値(および小数秒)はゼロに設定されます。元の値を日時に割り当てただけでしたか そもそも、秒はそのまま残っていたでしょう:

    DECLARE @thedatetime datetime
    SET @thedatetime = '2031-03-25 11:15:29'
    SELECT @thedatetime AS 'thedatetime';
    

    結果:

    +-------------------------+
    | thedatetime             |
    |-------------------------|
    | 2031-03-25 11:15:29.000 |
    +-------------------------+
    

    秒はそのまま残るだけでなく、秒の一部もそのまま残ります(ただし、スケール3までのみ):

    DECLARE @thedatetime datetime
    SET @thedatetime = '2031-03-25 11:15:29.123'
    SELECT @thedatetime AS 'thedatetime';
    

    結果:

    +-------------------------+
    | thedatetime             |
    |-------------------------|
    | 2031-03-25 11:15:29.123 |
    +-------------------------+
    

    例2–丸め

    smalldatetime に割り当てる前に、secondsコンポーネントをより高い値に設定すると、次のようになります。 データ・タイプ。

    DECLARE @thesmalldatetime smalldatetime
    SET @thesmalldatetime = '2031-03-25 11:15:31'
    SELECT 
      @thesmalldatetime AS 'thesmalldatetime',
      CAST(@thesmalldatetime AS datetime) AS 'datetime';
    

    結果:

    +---------------------+-------------------------+
    | thesmalldatetime    | datetime                |
    |---------------------+-------------------------|
    | 2031-03-25 11:16:00 | 2031-03-25 11:16:00.000 |
    +---------------------+-------------------------+
    

    そのため、分コンポーネントは次の分に切り上げられます。

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

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

    DECLARE @thesmalldatetime smalldatetime
    SET @thesmalldatetime = '2031-03-25 11:15:29'
    SELECT 
      @thesmalldatetime AS 'thesmalldatetime',
      CONVERT(datetime, @thesmalldatetime) AS 'datetime';
    

    結果:

    +---------------------+-------------------------+
    | thesmalldatetime    | datetime                |
    |---------------------+-------------------------|
    | 2031-03-25 11:15:00 | 2031-03-25 11:15:00.000 |
    +---------------------+-------------------------+
    

    例4–暗黙の変換

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

    DECLARE @thesmalldatetime smalldatetime, @thedatetime datetime
    SET @thesmalldatetime = '2031-03-25 11:15:29'
    SET @thedatetime = @thesmalldatetime
    SELECT 
      @thesmalldatetime AS 'thesmalldatetime',
      @thedatetime AS 'datetime';
    

    結果:

    +---------------------+-------------------------+
    | thesmalldatetime    | datetime                |
    |---------------------+-------------------------|
    | 2031-03-25 11:15:00 | 2031-03-25 11:15:00.000 |
    +---------------------+-------------------------+
    

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

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


    1. MariaDBでのSUBTIME()のしくみ

    2. Oracle11gのネストされたループ結合

    3. MariaDB DAY()の説明

    4. Postgisのインストール:タイプジオメトリは存在しません