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.