2014-06-17 85 views
0

目标:
目标是使值为'2014-06-14 09:00:00.000'的变量生成。基于动态对象的更改值

问题:
语法的代码创建一个动态对象,你如何从“2014年6月14日16:20 1:10.000”为价值“2014年6月14日09:00:00.000”?

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

信息:
*变量@ a的值将改变所有的时间和。重要的是“09:00:00.000”不可改变。
*值“16:20:10.000'”可能会不时不同。

+0

你的意思是你想改变时间? – Prashant16

+1

是否有意删除时间组件并将@小时添加到@a? – g2server

+0

Prashant16 - 是的。 g2server - 不,我提供了更多信息。 –

回答

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

感谢您的帮助! @a的值在每一次'2014-06-14 16:20:10.000'都可以是'2014-06-14 14:20:10.000' –

+1

@FullMetalGame好了,那是怎么回事。无论何时,它都会以'09:00:00.000'出现。 [SQL Fiddle](http://sqlfiddle.com/#!6/d41d8/19135) –

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); 
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' 
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