2014-06-17 3 views
0

목표 :
목표는 '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 '"은 때때로 다를 수 있습니다.

+0

은 당신을 의미합니까 시간을 변경하고 싶습니까? – Prashant16

+1

당신은 시간 구성 요소를 제거하고 @a에 9 시간을 추가한다는 의미입니까? – 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 Ok, 어떻게 문제가 되나요? . 어떤 시간을 가든 '09 : 00 : 00.000'으로 나옵니다. [SQL 피들] (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 
관련 문제