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?

kaes
źródło
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
AdaTheDev
źródło
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 )

jabu.hlong
źródło
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))
Israel Margulies
źródło
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
CD Jorgensen
źródło
6

W SQL Server 2005 użyłbym tego:

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

Wyniki: 2015 03 05

Gość
źródło
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)
BIReportGuy
źródło
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)
bsivel
źródło
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ą.

Anuj Kaul
źródło
0

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

Andrey
źródło
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'
Yousef Albakoush
źródło
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