基于动态对象更改值

时间:2014-06-17 06:17:38

标签: sql sql-server sql-server-2012

目标:
目标是使变量值为'2014-06-14 09:00:00.000'。

问题:
语法代码是作为动态对象创建的,如何将它从“2014-06-14 16:20:10.000”变为值'2014-06-14 09:00:00.000'?

DECLARE @a datetime = '2014-06-14 16:20:10.000'

信息:
*变量@a的值将一直在变化。重要的是“09:00:00.000”不可更改 *值“16:20:10.000'”可能会不时出现。

4 个答案:

答案 0 :(得分:1)

select dateadd(hour, 9, cast(cast(@a as date) as datetime))

答案 1 :(得分:0)

写为:

-- to get desired result the base query should be like:
SELECT DATEADD(day, DATEDIFF(day,'19000101',@a), CAST('09:00:00.000' AS DATETIME2(7)))
-- and then you can convert it into any other desired format as:
SELECT CONVERT(VARCHAR(23),
               DATEADD(day, DATEDIFF(day,'19000101',@a), 
               CAST('09:00:00.000' AS DATETIME2(7))),
               121);

答案 2 :(得分:0)

尝试这样的事情:如果'09:00:00.000'始终是常量而date part alone differs

DECLARE @a datetime = '2014-06-14 16:20:10.000'  
select @a  
SELECT CONVERT(DATETIME,CONVERT(VARCHAR(10), @a, 112))+'09:00:00.000'  

答案 3 :(得分:0)

试试这个:

DECLARE @a DATETIME = '2014-06-14 16:20:10.000'
SET @a = REPLACE(CONVERT(VARCHAR(10), @a, 102),'.','-') + ' 09:00:00.000'
SELECT @a