2012-07-24 3 views
5

오늘의 오후 4시 30 분에하고 싶습니다. 이 방법으로 하드 코딩하면 작동하지 않습니다.특정 시간에 오늘 날짜를 사용하여 DateTime을 구성하십시오.

SELECT '07242012 16:30:00.000' 

이것은 내가 생각했던 것보다 어렵습니다. 어떻게 접근합니까?

+0

당신이 사용중인 SQL 서버의 버전을 meantion 경우, 그것은 매우 도움이 될 수 있습니다. –

+0

아, 그것을 반영하기 위해 질문을 업데이트 할 것입니다. –

+0

태그를 통해 버전을 나타내도록 수정했습니다. 질문에 묻힌 버전 정보를 찾는 것보다 쉽습니다. –

답변

15

SQL 서버 2,005분의 2,000 :

SELECT DATEADD(MINUTE, 30, DATEADD(HOUR, 16, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP))); 

-- or 

SELECT DATEADD(MINUTE, (16*60) + 30, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP)) 

-- or 

SELECT CONVERT(DATETIME, CONVERT(CHAR(9), CURRENT_TIMESTAMP, 112) + '16:30'); 

SQL 서버 2008+ :

SELECT CONVERT(DATETIME, CONVERT(DATE, CURRENT_TIMESTAMP)) + '16:30'; 

SQL 서버 2012 : 아마

SELECT SMALLDATETIMEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), DAY(GETDATE()), 16, 30); 
+0

무엇, 아니 SQL 7? 6.5? :) –

+0

@ NathanSkert 나는 첫 번째 코드 블록이 7.0/6.5에서도 작동한다고 생각하지만, 그것을 증명하기 위해 인스턴스를 던지지는 않을 것이다. :-) –

+0

매우 철저한 대답, 감사합니다 아론! –

0

할 수있는 가장 쉬운 방법은 캐스팅하는 것입니다 현재 날짜/시간을 날짜로 (시간을 없애고) datetime으로 다시 캐스팅하여 datetime의 오버로드를 허용합니다. + (plus) 그리고 마지막으로 원하는 텍스트 시간을 datetime으로 변환합니다. 다음과 같이

select cast(cast(sysutcdatetime() as date) as datetime) + cast('16:30' as datetime) 

수익률 (2018년 1월 11일에서 실행할 경우) : 향후

2018-01-11 16:30:00.000 
+0

이것은 실제로 질문에 대답하지 않습니다. 다른 질문이있는 경우 [질문하기] (https://stackoverflow.com/questions/ask)를 클릭하여 질문 할 수 있습니다. 이 질문에 더 많은 관심을 끌기 위해 [현상금 추가] (https://stackoverflow.com/help/privileges/set-bounties)를 할 수도 있습니다. - [리뷰에서] (리뷰/저품절 포스트/18476550) –

+0

합리적인 답변 인 것처럼 보입니다. 그러나 여기에서 무슨 일이 일어나는지에 대한 설명을 추가하면 훨씬 좋습니다. 코드 스 니펫은 모두 그 자체로 아이디어를 설명하는 코드 다음에 수행중인 작업을 설명하는 단락만큼 유용하지 않습니다. – Caleb

+0

답장을 확장했습니다. 바라건대 지금은 더 가치가있는 것처럼 보입니다. –

관련 문제