SELECT
GETDATE() AS DateTime_LTz,
GETUTCDATE() AS DateTime_UTC;
SELECT
SYSDATETIME() AS DateTime2_LTz,
SYSUTCDATETIME() AS DateTime2_UTC;
DECLARE
@SomeDate DATETIME(3) = '2019-03-01 08:17:19.332';
SELECT YEAR(@SomeDate);
SELECT MONTH(@SomeDate);
SELECT DAY(@SomeDate);
The above SQL query returns
YEAR=20139,MONTH=3, andDAY=1.
DATEPART()
SELECT
DATEPART(YEAR, @dt) AS TheYear;
DATENAME()
SELECT
DATENAME(MONTH, @dt) AS TheMonth;
DECLARE
@SomeTime DATETIME2(7) = '1992-07-14 14:49:36.2294852';
SELECT
DATEADD(DAY, 1, @SomeTime) AS NextDay,
DATEADD(Day, -1, @SomeTime) AS PriorDay;
SELECT
DATEADD(HOUR, -3, DATEADD(DAY,-4, @SomeTime)) AS Minus4Day3Hours;
DECLARE
@StartTime DATETIME2(7) = '2012-03-01 14:29:36',
@EndTime DATETIME2(7) = '2012-03-01 18:00:00';
SELECT
DATEDIFF(SECOND, @StartTime, @EndTime) AS SecondsElapsed,
DATEDIFF(MINUTE, @StartTime, @EndTIme) AS MinutesElapsed,
DATEDIFF(HOUR, @StartTime, @EndTime) AS HoursElapsed;
CAST()CONVERT()FORMAT()Example:
DECLARE
@SomeDate DATETIME2(3) = '1991-06-04 08:00:09',
@SomeString NVARCHAR(30) = '1991-06-04 08:00:09',
@OldDateTime DATETIME = '1991-06-04 08:00:09';
SELECT
CAST(@SomeDate AS NVARCHAR(30)) AS DateToString,
CAST(@SomeString AS DATETIME2(3)) AS StringToDate,
CAST(@OldDateTime AS NVARCHAR(30)) AS OldDateToString;
Example:
DECLARE
@SomeDate DATETIME2(3) = '1793-02-21 11:13:19.033';
SELECT
CONVERT(NVARCHAR(30), @SomeDate,0) AS DefaultForm,
CONVERT(NVARCHAR(30), @SomeDate,1) AS UD_mdy,
CONVERT(NVARCHAR(30), @SomeDate, 101) AS US_mdyyyy,
CONVERT(NVARCHAR(30), @SomeDate, 120) AS ODBC_sec;
| Style Code | Format |
|---|---|
1 / 101 |
United States m/d/y |
3 / 103 |
British/French d/m/y |
4 / 104 |
German d.m.y |
11 / 111 |
Japanese y/m/d |
12 / 112 |
ISO Standard yyyymmdd |
20 / 120 |
ODBC Standard (121 for ms) |
126 |
ISO8601 yyyy-mm-dd hh:mi:ss.mmm |
127 |
yyyy-mm-ddThh:mi:ss.mmmZ |
CAST() or CONVERT()DECLARE
@SomeDate DATETIME2(3) = '1793-02-21 11:13:19.033';
SELECT
FORMAT(@SomeDate, 'd', 'en-US') AS US_d,
FORMAT(@SomeDate, 'd', 'de-DE') AS DE_d,
FORMAT(@SomeDate, 'D', 'de-DE') AS DE_D,
FORMAT(@SomeDate, 'yyyy-MM-dd') AS yMd,
A calendar table is a permanent table containing a list of dates and various components of those dates.
SELECT *
FROM dbo.Calendar;

CREATE TABLE dbo.Calendar (
DateKey INT NOT NULL,
[Date] DATE NOT NULL,
[Day] TINYINT NOT NULL,
DayOfWeek TINYINT NOT NULL,
DayName VARCHAR(10) NOT NULL,
....
)
SELECT
CAST(D.DateKey AS INT) AS DateKey,
D.[DATE] AS [DATE],
CAST(D.[day] AS TINYINT) AS [day],
CAST(d.[dayofweek] AS TINYINT) AS [DayOfWeek],
CAST(DATENAME(WEEKDAY, d.[Date]) AS VARCHAR(10)) AS [DayName],
....
SELECT
c.Date
FROM dbo.Calendar c
WHERE
c.MonthName = 'April'
AND c.DayName = 'Saturday'
AND c.CalendarYear = 2020
ORDER BY
c.Date;
SELECT
FYStart = DATEADD(MONTH, -6,
DATEADD(YEAR,
DATEDIFF(YEAR, 0,
DATEADD(MONTH, 6, d.[date])), 0)),
FiscalDayOfYear = DATEDIFF(DAY,
DATEADD(MONTH, -6,
DATEADD(YEAR,
DATEDIFF(YEAR, 0,
DATEADD(MONTH, 6, d.[date])), 0)), d.[Date]) + 1,
FiscalWeekOfYear = DATEDIFF(WEEK,
DATEADD(MONTH, -6,
DATEADD(YEAR,
DATEDIFF(YEAR,0,
DATEADD(MONTH,6,d.[date])), 0)), d.[Date]) +1
FROM dbo.Calendar d;
SELECT
fy.FYStart,
FiscalDayOfYear = DATEDIFF(DAY, fy.FYStart, d.[Date])+1,
FiscalWeekOfYear = DATEDIFF(WEEK, fy.FYStart, d.[Date]) +1
FROM dbo.Calendar d
CROSS APPLY
(
SELECT FYStart = DATEADD(MONTH, -6,
DATEADD(YEAR,
DATEDIFF(YEAR,0,
DATEADD(MONTH, 6, d.[date])),0))
) fy;
DATEFROMPARTS(year,month,day)TIMEFROMPARTS(hour, minute, second, fraction, precision)DATETIMEFROMPARTS(year, month, day, hour, minute, seconds,ms)DATETIME2FROMPARTS(year, month, day, hour, minute, second, fraction, precision)SMALLDATETIMEFROMPARTS(year, month, day, hour, minute)DATETIMEOFFSETFROMPARTS(year, month, day, hour, minute, second, fraction, hour_offset, minute_offset, precision)SELECT
DATETIMEFROMPARTS(1918,11,11,05,45,17,995) AS DT,
DATETIME2FROMPARTS(1918,11,11,05,45,17,0,0) AS DT20,
DATETIME2FROMPARTS(1918,11,11,05,45,17,995,3) AS DT23,
DATETIME2FROMPARTS(1918,11,11,05,45,17,9951234,3) AS DT27;
SELECT
DATETIMEOFFSETFROMPARTS(2009,08,14,21,00,00,0,5,30,0) AS IST,
DATETIMEOFFSETFROMPARTS(2009,08,14,21,00,00,0,5,30,0) AT TIME ZONE 'UTC' AS UTC;
SELECT
CAST('09/14/99' AS DATE) AS USDate;
SELECT
CONVERT(DATETIME2(3), 'April 4, 2019 11:52:29.998 PM') AS April14;
SELECT
PARSE('25 Dezember 2014' AS DATE USING 'de-de') AS Wihnachten;
| --- | --- |
SET LANGUAGE 'FRENCH'
DECLARE
@FrenchDate NVARCHAR(30) = N'18 avril 2019',
@FrenchNumberDate NVARCHAR(30) = N'18/4/2019';
SELECT
CAST(@FrenchDate AS DATETIME),
CAST(@FrenchNumberDate AS DATETIME);
| --- | --- |
DECLARE @SomeDate DATETIMEOFFSET = '2019-04-10 12:59:02.3908505 -04:00';
SELECT
SWITCHOFFSET(@SomeDate, '-07:00') AS LATime;
DECLARE @SomeDate DATETIME2(3) = '2019-04-10 12:59:02.390';
SELECT
TODATETIMEOFFSET(@SomeDate, '-04:00') AS EDT;
DECLARE @SomeDate DATETIME2(3) = '2016-09-04 02:28:29.681';
SELECT
TODATETIMEOFFSET(
DATEADD(HOUR, 7, @SomeDate),
'_02:00') AS BonnTime;
SELECT
tzi.name,
tzi.current_utc_offset,
tzi.is_currently_dst
FROM sys.time_zone_info tzi
WHERE
tzi.name LIKE '%Time Zone%';
Unsafe FunctionsSafe Functions