W SQL Server 2005 jak uzyskać bieżącą datę bez części czasu? Używałem, GETDATE()
ale chciałbym, aby miał czas 00: 00: 00.0
W SQL Server 2005 jak uzyskać bieżącą datę bez części czasu? Używałem, GETDATE()
ale chciałbym, aby miał czas 00: 00: 00.0
Odpowiedzi:
Najszybciej jeśli masz iteracyjne nad zestawu rekordów i nie ma datę w SQL Server 2008
SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
Wyróżniają się dwie różne i doskonałe odpowiedzi na StackOverflow: jeden , dwa
Konwersje Varchar są jednym z najgorszych sposobów na to. Oczywiście dla jednej wartości może to nie mieć znaczenia, ale warto się w nią przyzwyczaić.
Ten sposób jest również deterministyczny, powiedzmy, jeśli chcesz zaindeksować kolumnę obliczaną. Nawet osoby piszące książki o SQL Server przyłapują się na konwersji danych w czasie
Ta technika jest również rozszerzalna.
DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
DATEADD(month, DATEDIFF(month, 0, GETDATE()), 31)
Edytować:
Jak wspomniałem o determinizmie, metody varchar nie są bezpieczne, chyba że użyjesz stylu 112.
Inne odpowiedzi tutaj wskazują, że nigdy nie zastosowałbyś tego do kolumny. Jest to poprawne, ale możesz chcieć wybrać 100 tys. Wierszy lub tylko dodać kolumnę obliczeniową lub GROUP BY tylko. Następnie musisz użyć tej metody.
Inna odpowiedź wspomina również o stylu 110. To nie jest język ani SET DATEFORMAT bezpieczne i zawodzi przy ustawieniu języka „brytyjskiego”. Zobacz ostateczny przewodnik po typach datetime autorstwa Tibora Karaszi.