Przekonwertuj datę i godzinę programu SQL Server na krótszy format daty


83

Mam datetimekolumnę w SQL Server, która daje mi takie dane 10/27/2010 12:57:49 pmi chcę odpytać tę kolumnę, ale SQL Server zwraca tylko dzień, miesiąc i rok - np. 2010 10 27czy coś takiego.

Jakie funkcje powinienem zbadać?

Czy powinienem próbować przekonwertować na inny typ danych? Lub po prostu przekonwertować go na ciąg?


2
Zapoznaj się z tym artykułem: msdn.microsoft.com/en-us/library/ms187928.aspx W szczególności> Style daty i czasu
Brissles

6
Która wersja programu SQL Server? SQL Server 2008 wprowadził mnóstwo nowych typów danych związanych z datą i godziną, np. DATE- więc jeśli jesteś w 2008, możesz użyć SELECT CAST(YourDateTimeColumn AS DATE)i otrzymać tylko datę - bez części czasowej.
marc_s


Odpowiedzi:


123

Spójrz na CONVERT . Trzeci parametr to styl daty i godziny, na który chcesz przekonwertować.

na przykład

SELECT CONVERT(VARCHAR(10), GETDATE(), 103) -- dd/MM/yyyy format

12
Wygląda na to, że 106 to „dd mon yy”, a „dd / MM / yyyy” to 103
nahab

3
@nahab Masz rację. Musiałem też użyć varchar (11) zamiast varchar (10), aby zapobiec skróceniu roku (np. Zobaczyłem 195 zamiast 1953)
Henrov

6
Możesz również użyć 101, jeśli chcesz, aby wyniki były sformatowane mm / dd / rrrr
iliketocode

58

Spróbuj tego:

print cast(getdate() as date )


5
Ta opcja podoba mi się bardziej niż zaakceptowana odpowiedź. Pozostawia kolumnę w formacie daty, dzięki czemu moje „zamówienie według” działa poprawnie, a nie tylko varchar.
Milne

2
To nie działa w SQL Server 2005 i wcześniejszych. Typ danych DATE został wprowadzony w SQL 2008.
JerryOL

Jak wspomniano powyżej, rzeczywiście miło jest uzyskać typ danych typu data, ale gdy oczekiwany jest określony format (np. „Dd MM rrrr”), potrzeba więcej.
trincot

15

Jeśli potrzebujesz wyniku w formacie daty, możesz użyć:

Select Convert(DateTime, Convert(VarChar, GetDate(), 101))

10

Oprócz CAST i CONVERT, jeśli używasz Sql Server 2008, możesz przekonwertować na typ daty (lub użyć tego typu, aby rozpocząć), a następnie opcjonalnie przekonwertować ponownie na varchar:

declare @myDate date
set @myDate = getdate()
print cast(@myDate as varchar(10))

wynik:

2012-01-17

6

W SQL Server 2005 użyłbym tego:

select replace(convert(char(10),getdate(),102),'.',' ')

Wyniki: 2015 03 05


5

Jeśli masz datetime pole, które podaje wyniki jak ten 30.03.2018 08: 43: 28.177

Proponowane: i chcesz zmienić datetime do daty , aby wyglądać 2018-03-30

cast(YourDateField as Date)

1
nie dodałeś nic nowego, jabu.hlong udzieliłeś już tej odpowiedzi 4 lata temu ...
Paweł Czapski

Nie ma pewności, że data zostanie wyświetlona w formacie PO. Może to być rrrr-MM-dd, dd / MM / rrrr, dd / MM / rrrr 00:00:00 lub jeszcze coś innego.
trincot

4

Najkrótszy format daty mm / dd / rr można uzyskać za pomocą:

Select Convert(varchar(8),getdate(),1)

0

Wystarczy dodać słowo kluczowe data. Np. Wybierz datę (data zamówienia), odlicz (1) od zamówień, w których data zamówienia> „2014-10-01” pogrupuj według daty (data zamówienia);

data zamówienia jest datą i godziną. To zapytanie pokaże zamówienia dla tej daty zamiast daty i godziny.

Słowo kluczowe Date zastosowane w kolumnie z datą i godziną zmieni ją na datę krótką.


0

Dla dowolnych wersji SQL Server: dateadd (dd, datediff (dd, 0, getdate ()), 0)


Nie ma pewności, że data zostanie wyświetlona w formacie PO. Może to być rrrr-MM-dd, dd / MM / rrrr, dd / MM / rrrr 00:00:00 lub jeszcze coś innego.
trincot

0

Oryginalne pole DateTime: [_Date_Time]

Przekonwertowano na Shortdate: „Short_Date”

CONVERT(date, [_Date_Time]) AS 'Short_Date'

Zwraca to typ danych typu data, który zostanie pozostawiony interfejsowi w celu renderowania jako ciąg, więc może dać wynik „27/12/2018 00:00:00”. Nie o to prosił OP.
trincot

To właśnie chciał uzyskać - dd / MM / rrrr; i to właśnie daje moja odpowiedź 20.11.2018
Yousef Albakoush

Przede wszystkim 2018-11-20 to nie dd / MM / rrrr, ale rrrr-MM-dd. Ale renderowanie jest naprawdę zależne od systemu (i lokalizacji). W moim systemie generuje również godziny, minuty i sekundy (wszystkie zera). Dzieje się tak, ponieważ nie powiedziałeś SQLowi, jak data powinna być reprezentowana jako łańcuch, a OP wymaga dokładnego formatu ciągu.
trincot

Po pierwsze, 2018-11-20 jest taki, że mój komputer jest skonfigurowany do obsługi języka arabskiego; Po drugie, spróbuję po zmianie krótkiej daty na moim komputerze
Yousef Albakoush
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.