【问题标题】:Easiest way to place time variable to smalldatetime variable (only time part keeping the date)将时间变量放置到 smalldatetime 变量的最简单方法(仅时间部分保持日期)
【发布时间】:2020-11-23 09:36:18
【问题描述】:

我有两个变量

declare @dt1 smalldatetime = '2020-07-30 10:00:00'
declare @t1 time = '13:00:00'

t1 放入dt1 以获得'2020-07-30 13:00:00' 的最简单方法是什么(不丢失2020-07-30)

【问题讨论】:

  • 你试过什么?你在哪里卡住了?请向我们展示您的尝试。

标签: sql sql-server datetime sql-server-2008 time


【解决方案1】:
SELECT REPLACE(REPLACE(REPLACE(@dt1,DATEPART(hour,@dt1),DATEPART(hour,@t1)),DATEPART(MINUTE,@dt1),DATEPART(MINUTE,@t1)),DATEPART(SECOND,@dt1),DATEPART(SECOND,@t1))

【讨论】:

    【解决方案2】:

    我个人会将它们转换为 ISO varchar 值,连接并转换回来:

    DECLARE @dt1 smalldatetime = '2020-07-30T10:00:00';
    DECLARE @t1 time = '13:00:00';
    
    SELECT CONVERT(smalldatetime,CONVERT(varchar(10),@dt1,126) + 'T' + CONVERT(varchar(8),@t1,114),126);
    

    【讨论】:

      【解决方案3】:

      也许是这个?

      declare @dt1 smalldatetime = '2020-07-30 10:00:00'
      declare @t1 time = '13:00:00'
      
      
      SELECT CAST(LEFT(CONCAT(CAST(@dt1 AS DATE), 'T', @t1), 19) AS SMALLDATETIME)
      

      【讨论】:

        【解决方案4】:

        我会将cast()smalldatetime 转换为date 以截断时间分量,然后返回smalldatetime。然后你也可以将cast() 到其他时间组件到smalldatetime,然后添加两者:

        select 
            cast(cast(@dt1 as date) as smalldatetime) 
            + cast(@t1 as smalldatetime) as newdatetime
        

        Demo on DB Fiddle

        |新日期时间 | | :--------------- | | 2020-07-30 13:00 |

        【讨论】:

          【解决方案5】:

          您可以将三个小时添加到当前 SMALLDATETIME 或通过连接所需部分来创建一个新的:

          DECLARE @dt1 SMALLDATETIME = '2020-07-30 10:00:00'
          DECLARE @t1 TIME = '13:00:00'
          
          SELECT
              @dt1 AS "source",
              DATEADD(HOUR, 3, @dt1) AS "three hours added",  -- just add three hours
              CONVERT(SMALLDATETIME,  -- concatenate the desired parts and convert
                  DATETIMEFROMPARTS(DATEPART(YEAR, @dt1),
                                  DATEPART(MONTH, @dt1),
                                  DATEPART(DAY, @dt1),
                                  DATEPART(HOUR, @t1),
                                  DATEPART(MINUTE, @t1),
                                  DATEPART(SECOND, @t1),
                                  0)
              ) AS "concatenated parts"
          

          结果:

          source              |three hours added      |concatenated parts
          ----------------------------------------------------------------
          2020-07-30 10:00:00 |2020-07-30 13:00:00    |2020-07-30 13:00:00
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-10-18
            • 2017-08-24
            • 1970-01-01
            • 2019-08-10
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多