Jak zwrócić tylko datę z typu danych SQL Server DateTime
SELECT GETDATE()
Zwraca: 2008-09-22 15:24:13.790
Chcę tę część daty Bez części czasu: 2008-09-22 00:00:00.000
30 answers
Na SQL Server 2008
i wyżej, powinieneś CONVERT
do tej pory:
SELECT CONVERT(date, getdate())
W starszych wersjach można wykonać następujące czynności:
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @your_date))
Na przykład
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
Daje mi
2008-09-22 00:00:00.000
Plusy:
- Nie
varchar
datetime
wymagane konwersje - No need to think about
locale
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-26 05:56:30
SQLServer 2008 ma teraz typ danych "date", który zawiera tylko datę bez składnika czasowego. Każdy, kto korzysta z SQLServer 2008 i nowszych, może wykonać następujące czynności:
SELECT CONVERT(date, GETDATE())
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-18 15:03:53
Jeśli używasz SQL 2008 i nowszych:
select cast(getdate() as date)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-29 23:11:59
DATEADD i DATEDIFF są lepsze niż konwersja do varchar. Oba zapytania mają ten sam plan wykonania, ale plany wykonania dotyczą przede wszystkim strategii dostępu danych i nie zawsze ujawniają ukryte koszty związane z czasem procesora wymaganym do wykonania wszystkich elementów. Jeśli oba zapytania są uruchamiane przeciwko tabeli z milionami wierszy, czas procesora przy użyciu DateDiff może być bliski 1/3 konwertowanego czasu procesora!
Aby zobaczyć plany wykonania dla zapytań:
set showplan_text on
GO
Obie daty a DATEDIFF wykona convert_implicit.
Chociaż rozwiązanie CONVERT jest prostsze i łatwiejsze do odczytania dla niektórych, to jest wolniejsze. Nie ma potrzeby przywracania do datetime (jest to domyślnie wykonywane przez serwer). W metodzie DateDiff nie ma również potrzeby dalszego stosowania DateAdd, ponieważ wynik integer będzie również niejawnie skonwertowany z powrotem do datetime.
Wybierz Konwertuj (varchar, MyDate, 101) z DatesTable
|--Compute Scalar(DEFINE:([Expr1004]=CONVERT(varchar(30),[TEST].[dbo].[DatesTable].[MyDate],101)))
|--Table Scan(OBJECT:([TEST].[dbo].[DatesTable]))
Wybierz DATEADD(dd, 0, DATEDIFF (dd, 0, MyDate)) z DatesTable
|--Compute Scalar(DEFINE:([Expr1004]=dateadd(day,(0),CONVERT_IMPLICIT(datetime,datediff(day,'1900-01-01 00:00:00.000',CONVERT_IMPLICIT(datetime,[TEST].[dbo].[DatesTable].[MyDate],0)),0))))
|--Table Scan(OBJECT:([TEST].[dbo].[DatesTable]))
Użycie FLOOR (), jak zasugerował @digi, ma wydajność zbliżoną do DateDiff, ale nie jest zalecane, ponieważ przekazanie typu danych datetime do float i back nie zawsze daje oryginalną wartość.
Nie wierz nikomu. Spójrz na statystyki wydajności i przetestuj je sam! Bądź ostrożny, gdy testujesz swoje wyniki. Wybór wielu wiersze do klienta ukryje różnicę wydajności, ponieważ wysyłanie wierszy przez sieć trwa dłużej niż wykonywanie obliczeń. Więc upewnij się, że praca dla wszystkich wierszy jest wykonywana przez serwer, ale nie ma rowset wysłany do klienta.Wydaje się być zamieszanie dla niektórych ludzi, kiedy Optymalizacja pamięci podręcznej wpływa na zapytania. Uruchamianie dwóch zapytań w tej samej partii lub w oddzielnych partiach nie ma wpływu na buforowanie. Możesz więc ręcznie usunąć pamięć podręczną lub po prostu uruchom zapytania wiele razy. Każda Optymalizacja dla zapytania # 2 wpłynie również na kolejne zapytania, więc wyrzuć wykonanie # 1, jeśli chcesz.
Oto pełny skrypt testowy i wyniki wydajności , które dowodzą, że DateDiff jest znacznie szybszy niż konwersja na varchar.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:53
Spróbuj tego:
SELECT CONVERT(VARCHAR(10),GETDATE(),111)
Powyższa instrukcja konwertuje bieżący format na YYYY/MM/DD
, proszę zapoznać się z ten link Aby Wybrać preferowany format.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-14 11:10:54
SELECT CONVERT(datetime, CONVERT(varchar, GETDATE(), 101))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-31 09:45:20
Dla zwrotu w formacie daty
Obsada (OrderDate jako data)
Powyższy kod będzie działał w sql server 2010
Powróci jak 12/12/2013
Dla SQL Server 2012 użyj poniższego kodu
CONVERT(VARCHAR(10), OrderDate , 111)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-27 08:36:04
Możesz użyć funkcji CONVERT
, aby zwrócić tylko datę. Zobacz link(y) poniżej:
Manipulacja datą i czasem w SQL Server 2000
Składnia użycia funkcji convert to:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-14 11:45:09
Używanie FLOOR () - wystarczy wyciąć część czasu.
SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 07:38:59
SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),103) --21/09/2011
SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),101) --09/21/2011
SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),111) --2011/09/21
SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),107) --Sep 21, 2011
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-27 21:10:23
Jeśli chcesz użyć konwertera i uzyskać taki sam wynik jak w pierwotnym zadanym pytaniu, to znaczy, RRRR-mm-dd, użyj CONVERT(varchar(10),[SourceDate as dateTime],121)
tego samego kodu, co poprzednie odpowiedzi, ale kod do konwersji na RRRR-mm-dd z myślnikami to 121.
If I can get on myapbox for a second, tego rodzaju formatowanie nie należy do warstwy danych, i dlatego nie było to możliwe bez głupich "sztuczek", aż do SQL Server 2008, kiedy wprowadzono rzeczywiste typy danych datepart. Dokonywanie takich konwersji w warstwie danych jest ogromną stratą kosztów na Twój DBMS, ale co ważniejsze, w momencie, gdy zrobisz coś takiego, w zasadzie utworzyłeś osierocone dane w pamięci, które zakładam, że wrócisz do programu. Nie możesz umieścić go z powrotem w innej kolumnie 3NF+ lub porównać go z czymkolwiek wpisanym bez powrotu, więc wszystko, co zrobiłeś, to wprowadzone punkty awarii i usunięte odniesienia relacyjne.
Należy zawsze iść do przodu i zwrócić swoje dane dateTime wpisz do programu wywołującego iw warstwie prezentacji dokonaj niezbędnych korekt. jak tylko przejdziesz do konwersji rzeczy przed zwróceniem ich do rozmówcy, usuwasz wszelką nadzieję na integralność odniesienia z aplikacji. To zapobiegnie operacji aktualizacji lub usunięcia, ponownie, chyba że wykonasz jakiś rodzaj ręcznego rewersu, który ponownie naraża twoje dane na błąd człowieka / kodu / gremlina, gdy nie ma potrzeby.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-26 20:00:30
SELECT DATEADD(DD, DATEDIFF(DD, 0, GETDATE()), 0)
SELECT DATEADD(DAY, 0, DATEDIFF(DAY,0, GETDATE()))
SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 101))
Edit: dwie pierwsze metody są zasadniczo takie same, a out wykonuje metodę convert to varchar.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-29 22:42:55
Aby uzyskać wskazany wynik, używam następującego polecenia.
SELECT CONVERT(DATETIME,CONVERT(DATE,GETDATE()))
I holpe to jest przydatne.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-29 22:54:44
Jeśli używasz SQL Server 2012 lub nowszych wersji ,
Użycie Format()
funkcja.
Istnieje już wiele odpowiedzi i typów formatowania dla SQL server. Ale większość metod jest nieco niejednoznaczna i trudno byłoby zapamiętać liczby dla typu formatu lub funkcji w odniesieniu do określonego formatu daty. Dlatego w kolejnych wersjach SQL server jest lepsza opcja.
FORMAT ( value, format [, culture ] )
Opcja kultura jest bardzo przydatna, jak można określ datę według widzów.
Musisz pamiętać d (dla małych wzorów) i D (dla długich wzorów).
1."d" - Krótki Wzór daty.
2009-06-15T13:45:30 -> 6/15/2009 (en-US)
2009-06-15T13:45:30 -> 15/06/2009 (fr-FR)
2009-06-15T13:45:30 -> 2009/06/15 (ja-JP)
2."D" - długi wzór daty.
2009-06-15T13:45:30 -> Monday, June 15, 2009 (en-US)
2009-06-15T13:45:30 -> 15 июня 2009 г. (ru-RU)
2009-06-15T13:45:30 -> Montag, 15. Juni 2009 (de-DE)
Więcej przykładów w zapytaniu.
DECLARE @d DATETIME = '10/01/2011';
SELECT FORMAT ( @d, 'd', 'en-US' ) AS 'US English Result'
,FORMAT ( @d, 'd', 'en-gb' ) AS 'Great Britain English Result'
,FORMAT ( @d, 'd', 'de-de' ) AS 'German Result'
,FORMAT ( @d, 'd', 'zh-cn' ) AS 'Simplified Chinese (PRC) Result';
SELECT FORMAT ( @d, 'D', 'en-US' ) AS 'US English Result'
,FORMAT ( @d, 'D', 'en-gb' ) AS 'Great Britain English Result'
,FORMAT ( @d, 'D', 'de-de' ) AS 'German Result'
,FORMAT ( @d, 'D', 'zh-cn' ) AS 'Chinese (Simplified PRC) Result';
US English Result Great Britain English Result German Result Simplified Chinese (PRC) Result
---------------- ----------------------------- ------------- -------------------------------------
10/1/2011 01/10/2011 01.10.2011 2011/10/1
US English Result Great Britain English Result German Result Chinese (Simplified PRC) Result
---------------------------- ----------------------------- ----------------------------- ---------------------------------------
Saturday, October 01, 2011 01 October 2011 Samstag, 1. Oktober 2011 2011年10月1日
Jeśli chcesz więcej formatów, możesz przejść do:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-20 05:26:36
Convert(nvarchar(10), getdate(), 101) ---> 5/12/14
Convert(nvarchar(12), getdate(), 101) ---> 5/12/2014
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-06 12:27:44
Jeśli potrzebujesz wyniku w VARCHAR datatype należy przejść przez
SELECT CONVERT(DATE, GETDATE()) --2014-03-26
SELECT CONVERT(VARCHAR(10), GETDATE(), 111) --2014/03/26
Który jest już wymieniony powyżej
Jeśli potrzebujesz wyniku w formacie daty i czasu, powinieneś przejść przez jedno z poniższych zapytań
1) SELECT CONVERT(DATETIME,CONVERT(VARCHAR(10), GETDATE(), 111))
jako OnlyDate --2014-03-26 00:00:00.000
2) SELECT CONVERT(DATETIME,CONVERT(VARCHAR(10), GETDATE(), 112))
jako OnlyDate --2014-03-26 00:00:00.000
3)
DECLARE @OnlyDate DATETIME
SET @OnlyDate = DATEDIFF(DD, 0, GETDATE())
SELECT @OnlyDate AS OnlyDate
--2014-03-26 00:00:00.000
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-29 22:54:51
Jeśli przypisujesz wyniki do kolumny lub zmiennej, podaj jej typ daty, a konwersja jest niejawna.
DECLARE @Date DATE = GETDATE()
SELECT @Date --> 2017-05-03
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-03 16:05:44
Myślę, że to zadziała w Twoim przypadku:
CONVERT(VARCHAR(10),Person.DateOfBirth,111) AS BirthDate
//here date is obtained as 1990/09/25
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-27 06:44:56
OK, choć trochę się spóźniłem :), oto inne rozwiązanie.
SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) as DATETIME)
Wynik
2008-09-22 00:00:00.000
A jeśli używasz SQL Server 2012 i wyższych, możesz użyć FORMAT()
funkcji takiej jak Ta -
SELECT FORMAT(GETDATE(), 'yyyy-MM-dd')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-13 10:46:30
Nawet przy użyciu starożytnego serwera MSSQL 7.0, kod tutaj (dzięki uprzejmości tego link) pozwolił mi uzyskać dowolny format daty, którego szukałem w tym czasie:
PRINT '1) Date/time in format MON DD YYYY HH:MI AM (OR PM): ' + CONVERT(CHAR(19),GETDATE())
PRINT '2) Date/time in format MM-DD-YY: ' + CONVERT(CHAR(8),GETDATE(),10)
PRINT '3) Date/time in format MM-DD-YYYY: ' + CONVERT(CHAR(10),GETDATE(),110)
PRINT '4) Date/time in format DD MON YYYY: ' + CONVERT(CHAR(11),GETDATE(),106)
PRINT '5) Date/time in format DD MON YY: ' + CONVERT(CHAR(9),GETDATE(),6)
PRINT '6) Date/time in format DD MON YYYY HH:MM:SS:MMM(24H): ' + CONVERT(CHAR(24),GETDATE(),113)
Wyprodukował ten wynik:
1) Date/time in format MON DD YYYY HH:MI AM (OR PM): Feb 27 2015 1:14PM
2) Date/time in format MM-DD-YY: 02-27-15
3) Date/time in format MM-DD-YYYY: 02-27-2015
4) Date/time in format DD MON YYYY: 27 Feb 2015
5) Date/time in format DD MON YY: 27 Feb 15
6) Date/time in format DD MON YYYY HH:MM:SS:MMM(24H): 27 Feb 2015 13:14:46:630
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-27 21:16:05
DECLARE @yourdate DATETIME = '11/1/2014 12:25pm'
SELECT CONVERT(DATE, @yourdate)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-30 00:21:57
Popieram następujące, które nie zostały wymienione:
DATEFROMPARTS(DATEPART(yyyy, @mydatetime), DATEPART(mm, @mydatetime), DATEPART(dd, @mydatetime))
Nie obchodzi go również lokalny lub zrobić podwójną konwersję -- chociaż każdy 'datepart' prawdopodobnie robi matematykę. Może więc być nieco wolniejsza niż metoda datediff, ale dla mnie jest o wiele bardziej klarowna. Zwłaszcza, gdy chcę grupować tylko przez rok i miesiąc(Ustaw dzień na 1).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-29 22:52:24
Data:
SELECT CONVERT(date, GETDATE()) SELECT CAST(GETDATE() as date)
Czas:
SELECT CONVERT(time , GETDATE() , 114) SELECT CAST(GETDATE() as time)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-21 09:24:33
Począwszy od SQL SERVER 2012, możesz to zrobić:
SELECT FORMAT(GETDATE(), 'yyyy-MM-dd 00:00:00.000')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-20 15:58:29
Na SQL Server 2000
CAST(
(
STR( YEAR( GETDATE() ) ) + '/' +
STR( MONTH( GETDATE() ) ) + '/' +
STR( DAY( GETDATE() ) )
)
AS DATETIME)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-21 06:27:47
Dlaczego nie używasz DATE_FORMAT (your_datetiem_column, '%d-%m-%Y' ) ?
EX: select DATE_FORMAT( some_datetime_column, '%d-%m-%Y' ) from table_name
Możesz zmienić kolejność m, d I roku, zmieniając '%d-%m-%Y'
część
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-17 05:46:19
Tego brakowało we wszystkich odpowiedziach, może nie jest najbardziej wydajny, ale bardzo łatwy do napisania i zrozumienia, nie wymaga stylu, nie ma złożonych funkcji daty.
SELECT CONVERT(DATETIME,CONVERT(DATE,((GETDATE()))))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-29 22:54:37
Po prostu możesz to zrobić w ten sposób:
SELECT CONVERT(date, getdate())
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @your_date))
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
Wyjścia jako:
2008-09-22 00:00:00.000
Lub po prostu zrób tak:
SELECT CONVERT (DATE, GETDATE()) 'Date Part Only'
Wynik:
Date Part Only
--------------
2013-07-14
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-08 09:01:49
Możesz użyć następującego dla części daty i formatowania daty:
DATENAME = > zwraca łańcuch znaków reprezentujący podany datepart określonej daty
DATEADD = > funkcja DATEPART()
jest używana do zwracania pojedynczej części daty/czasu, takiej jak Rok, Miesiąc, Dzień, godzina, minuta itp.
DATEPART = > Zwraca liczbę całkowitą, która przedstawia podany datepart podanej daty.
CONVERT()
= > Funkcja CONVERT()
jest funkcją ogólną, która przekształca wyrażenie jednego typu danych na inny.
Na
CONVERT()
funkcja może być używana do wyświetlania danych daty/czasu w różnych formatach.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-29 16:12:51
Date(date&time field) i DATE_FORMAT (date&time,'%Y-%m-%d') oba zwracają tylko date z date&time
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-08 06:28:44