Jak wybrać datę bez czasu w SQL


Odpowiedzi:


148

Chyba chce sznurka.

select convert(varchar(10), '2011-02-25 21:17:33.933', 120)

120 tu mówi funkcję konwersji, które przekroczyły datę wejścia w następującym formacie : yyyy-mm-dd hh:mi:ss.


Po co jest 120?
Павле

@ Przeczytaj ten artykuł Style daty i godziny
Fox Vĩnh Tâm

użyłem tego wyboru konwersji (varchar (10), APPROVED_DATE, 120), dostałem kolumnę błędów APPROVED_DATE datetime, jak to przekonwertować? błąd Nie można powiązać wieloczęściowego identyfikatora „LAB_RESULTS.APPROVED_DATE”.
Abdullah

530

W przypadku SQL Server 2008:

Convert(date, getdate())  

Zapoznaj się z https://docs.microsoft.com/en-us/sql/t-sql/functions/getdate-transact-sql


6
Pojawia się komunikat „Data typu nie jest zdefiniowanym typem systemu”.
SeaDrive

10
DATEjest nowy w 2008 roku.
Tim Schmelter

33
nie mam pojęcia, dlaczego jest to tak pozytywna odpowiedź. to pytanie dotyczy SQL Server 2005, NIE 2008. 2005 nie ma typu datedanych, dlatego renderowanie tego rozwiązania jest nieprawidłowe.
Joshua Burns

84
Jest to doceniane, ponieważ ludzie szukają rozwiązań swojego problemu, a nie autorzy. Więc jeśli 110 osób uzna, że ​​to działało dla nich, myślę, że to uczciwe, że ma 110 głosów pozytywnych.
James

Mam ten sam błąd, gdy korzystam z funkcji wyboru konwersji (table.order_date, getdate ()); SQL Server wersja 2017, błąd (Data typu nie jest zdefiniowanym typem systemu) typ kolumny datetime
Abdullah

57

Najszybszy jest datediffnp

select dateadd(d, datediff(d,0, [datecolumn]), 0), other..
from tbl

Ale jeśli potrzebujesz tylko użyć wartości, możesz pominąć dateadd, np

select ...
WHERE somedate <= datediff(d, 0, getdate())

gdzie wyrażenie datediff(d, 0, getdate())jest wystarczające, aby zwrócić dzisiejszą datę bez części czasu.


Stary, ale dobry, używał tej sztuczki dziesiątki razy w starszych bazach danych 2000/2005.
KeithS,

43

Użyj CAST (GETDATE () jako daty), który zadziałał dla mnie, proste.


gdzie dodam nazwę mojej kolumny? wybrać obsadę (getdate () jako datę, data_ zamówienia)?
Abdullah

@AbdullahCAST(order_date AS DATE)
Andrew Morton


12

możesz użyć w ten sposób

SELECT Convert(varchar(10), GETDATE(),120) 

gdzie umieszczę datę zamówienia nazwy kolumny?
Abdullah

10

W przypadku starszej wersji 2008 :

SELECT DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)


brawa za to! Inne rozwiązania opierają się tylko na części varchar (10), która po prostu obcina wartość.
Gonza Oviedo

2

Jest trochę późno, ale użyj funkcji „curdate” ODBC (nawiasy kątowe „fn” to sekwencja ucieczki funkcji ODBC).

SELECT {fn curdate()} 

Wynik: 2013-02-01


4
Jestem szczerze ciekawy, jak według ciebie twoja odpowiedź jest lepsza niż odpowiedź zaakceptowana. A może odwołujesz się do innych odpowiedzi?
Mikael Eriksson

1
@Mikael Eriksson: Hmm, ponieważ funkcje ODBC są funkcjami kanonicznymi, a zatem indeksowalnymi, w przeciwieństwie do niedeterministycznych funkcji SQL Server. Ale nieważne, to tylko problem ze skalowaniem, kiedy przechodzisz od 3 wpisów w testowaniu do 1 * 10E6 w produkcji, nie ma żadnych problemów podczas programowania;)
Stefan Steiger

8
Jeśli uruchomisz to zapytanie SELECT {fn curdate()} FROM (SELECT 1) AS T(X)i spojrzysz na rzeczywisty plan wykonania (wersja xml), zobaczysz, że to, co jest faktycznie wykonane, jest CONVERT(varchar(10),getdate(),23). Tak typ danych tej funkcji ODBC jest varchar(10)co oznacza, że jeśli chcesz porównać wynik z datetimedostaniesz niejawna konwersja z varchar(10)celu datetimena sznurkuyyyy-mm-dd . Ta niejawna konwersja zakończy się niepowodzeniem set dateformat dmy.
Mikael Eriksson,

1
@Mikael Eriksson: Wygląda jak błąd, zamiast tego powinni używać SELECT CONVERT (char (8), GETDATE (), 112).
Stefan Steiger

„funkcje kanoniczne i dlatego indeksowalne, w przeciwieństwie do niedeterministycznych funkcji SQL-Server” - eee, co?
Martin Smith,


2

Konwertuj go z powrotem na datę i godzinę po konwersji na datę, aby w razie potrzeby zachować ten sam czas

select Convert(datetime, Convert(date, getdate())  )

2

Jeśli potrzebujesz czasu na zera, takie jak 2018-01-17 00:00:00.000:

SELECT CONVERT(DATETIME, CONVERT(DATE, GETDATE()), 121)


Dzięki, tego właśnie szukałem.
Pratik Ghag

1

Użycie jest proste:

convert(date, Btch_Time)

Przykład poniżej:

Stół:

Efft_d       Loan_I  Loan_Purp_Type_C   Orig_LTV    Curr_LTV    Schd_LTV    Un_drwn_Bal_a      Btch_Time            Strm_I  Btch_Ins_I
2014-05-31  200312500   HL03             NULL         1.0000    1.0000         1.0000      2014-06-17 11:10:57.330  1005    24851e0a-53983699-14b4-69109


Select * from helios.dbo.CBA_SRD_Loan where Loan_I in ('200312500') and convert(date, Btch_Time) = '2014-06-17'

1

Jest już za późno, ale obserwowanie mnie zadziałało

declare @vCurrentDate date=getutcdate()

select @vCurrentDate

Gdy typem danych jest data, godziny zostaną obcięte


0

W PLSQL możesz używać

to_char(SYSDATE,'dd/mm/yyyy')

rozważ przeniesienie tego do komentarza.
xlembouras

To pytanie dotyczy SQL Server ... nie Oracle
Ben

0

Najpierw przekonwertuj datę na liczbę zmiennoprzecinkową (która wyświetla wartość liczbową), następnie ROUNDliczbę na 0 miejsc po przecinku, a następnie przekonwertuj ją na datę i godzinę .

convert(datetime,round(convert(float,orderdate,101),0) ,101)

0

Jeśli chcesz zwrócić typ daty, wystarczy użyć daty

CONVERT(date, SYSDATETIME())

lub

SELECT CONVERT(date,SYSDATETIME()) 

lub

DECLARE @DateOnly Datetime
SET @DateOnly=CONVERT(date,SYSDATETIME())

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.