将时间变量放置到 smalldatetime 变量的最简单方法(仅时间部分保留日期)
Easiest way to place time variable to smalldatetime variable (only time part keeping the date)
我有两个变量
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)
SELECT REPLACE(REPLACE(REPLACE(@dt1,DATEPART(hour,@dt1),DATEPART(hour,@t1)),DATEPART(MINUTE,@dt1),DATEPART(MINUTE,@t1)),DATEPART(SECOND,@dt1),DATEPART(SECOND,@t1))
我个人会将它们转换为 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);
也许是这个?
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)
我会 cast()
smalldatetime
到 date
来截断时间部分,然后返回 smalldatetime
。然后你也可以 cast()
到其他时间组件到 smalldatetime
,并添加两个:
select
cast(cast(@dt1 as date) as smalldatetime)
+ cast(@t1 as smalldatetime) as newdatetime
| newdatetime |
| :--------------- |
| 2020-07-30 13:00 |
您可以在当前 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
我有两个变量
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)
SELECT REPLACE(REPLACE(REPLACE(@dt1,DATEPART(hour,@dt1),DATEPART(hour,@t1)),DATEPART(MINUTE,@dt1),DATEPART(MINUTE,@t1)),DATEPART(SECOND,@dt1),DATEPART(SECOND,@t1))
我个人会将它们转换为 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);
也许是这个?
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)
我会 cast()
smalldatetime
到 date
来截断时间部分,然后返回 smalldatetime
。然后你也可以 cast()
到其他时间组件到 smalldatetime
,并添加两个:
select
cast(cast(@dt1 as date) as smalldatetime)
+ cast(@t1 as smalldatetime) as newdatetime
| newdatetime | | :--------------- | | 2020-07-30 13:00 |
您可以在当前 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