Hvad er SQL Server-funktionalitet, der giver dig mulighed for at få den aktuelle dato som en DATE
-type som SQL Standard “s CURRENT_DATE
-funktion. Hvad er <current date value function>
til SQL Server?
Ved hjælp af PostgreSQL ser jeg ud til noget som
SELECT CURRENT_DATE; current_date -------------- 2018-06-27 (1 row)
Svar
Du kan bruge enten GETDATE
(returtype datetime
) eller SYSDATETIME
(returtype datetime2
), hvor forskellen er præcisionen op til nanosekunder for SYSDATETIME()
.
Eksempel :
SELECT GETDATE() fn_GetDate, SYSDATETIME() fn_SysDateTime
Resultater:
fn_GetDate fn_SysDateTime 2018-06-27 10:31:18.963 2018-06-27 10:31:18.9659170
Se Datatyper og -funktioner (Transact-SQL) for dato og tid i produktdokumentationen.
For fuldstændighed genkender SQL Server også CURRENT_DATE
som nævnt i spørgsmålet som en ODBC-skalarfunktion :
SELECT {fn CURRENT_DATE()};
Dette returnerer varchar(10)
, så det ville være nødvendigt med en eksplicit rollebesætning eller konvertering til date
datatype:
SELECT CONVERT(date, {fn CURRENT_DATE()});
Den indbyggede i funktioner anbefales over ODBC-skalarfunktioner.
Svar
CAST (... to date)
med GETDATE()
eller SYSDATETIME()
Den bedste måde er
SELECT CAST( GETDATE() AS date );
Ved udvidelse i SQL Server kan du caste SYSDATETIME()
til dato,
SELECT CAST( SYSDATETIME() AS date );
Dokumenterne på SYSDATETIME
(Transact-SQL) viser nogle flere eksempler,
SELECT CONVERT (date, SYSDATETIME()) ,CONVERT (date, SYSDATETIMEOFFSET()) ,CONVERT (date, SYSUTCDATETIME()) ,CONVERT (date, CURRENT_TIMESTAMP) ,CONVERT (date, GETDATE()) ,CONVERT (date, GETUTCDATE()); /* All returned 2007-04-30 */
Der kan være fordele CAST (GETDATE() AS date)
, som returnerer indbygget mindre præcision.
Kommentarer
- Sådan har jeg altid gjort det, selvom hvis du støber to DATE, betyder det noget, om inputtiden har nøjagtighed til nanosekund?