2012-07-24 20 views
5

Chciałbym uzyskać 16:30 bieżącego dnia. Kodowanie w ten sposób nie działa:Skonstruuj DateTime przy użyciu dzisiejszej daty o określonej godzinie

SELECT '07242012 16:30:00.000' 

To okazuje się być trudniejsze, niż myślałem. Jak mam się do tego podejść?

+0

w przyszłości, to może być bardzo pomocne, jeśli meantion jaka wersja SQL Server używasz. –

+0

Ah, zaktualizuje pytanie, aby to odzwierciedlić. –

+0

Zmieniłem edycję, aby wskazać wersję za pomocą tagu. Łatwiejsze niż wyszukiwanie informacji o wersji ukrytych w pytaniu. –

Odpowiedz

15

SQL Server 2000/2005:

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 Server 2008+:

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

SQL Server 2012:

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

Co, bez SQL 7? 6.5? :) –

+0

@NathanSkert Myślę, że pierwszy blok kodu będzie działał również w wersji 7.0/6.5, ale nie zamierzam zrzucać instancji, aby to udowodnić. :-) –

+0

Niezwykle dokładna odpowiedź, dzięki Aaron! –

0

Prawdopodobnie najłatwiej jest rzucić bieżąca data/godzina do daty (znosząc czas wolny), odrzuć go z powrotem do daty i godziny, aby umożliwić przeciążenie datetime. + (plus) i ostatecznie odrzuć żądany czas tekstowy do datetime. W następujący sposób:

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

powraca (po uruchomieniu w dniu 11 stycznia 2018):

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

To tak naprawdę nie odpowiada na pytanie. Jeśli masz inne pytanie, możesz je zadać, klikając [Zadaj pytanie] (https://stackoverflow.com/questions/ask). Możesz również [dodać nagrodę] (https://stackoverflow.com/help/privileges/set-bounties), aby zwrócić większą uwagę na to pytanie. - [Z recenzji] (/ recenzja/niskiej jakości-posts/18476550) –

+0

To wygląda na rozsądną odpowiedź, ale byłoby znacznie lepiej, gdybyś dodał wyjaśnienie, co się tutaj dzieje. Fragment kodu sam w sobie nie jest tak użyteczny jak akapit wyjaśniający, co robisz, a następnie kod, który ilustruje ten pomysł. – Caleb

+0

Rozszerzyłem odpowiedź. Mam nadzieję, że teraz wydaje się bardziej opłacalne –

Powiązane problemy