Summary: in this tutorial, you will learn how to use the SQL Server DATETIME2 to store both date and time data in a table.
Introduction to SQL Server DATETIME2
To store both date and time in the database, you use the SQL Server DATETIME2 data type.
The syntax of DATETIME2 is as follows:
DATETIME2(fractional seconds precision)
Code language: SQL (Structured Query Language) (sql)The fractional seconds precision is optional. It ranges from 0 to 7.
The following statement illustrates how to create a table that consists of a DATETIME2 column:
CREATE TABLE table_name (
...
column_name DATETIME2(3),
...
);
Code language: SQL (Structured Query Language) (sql)The DATETIME2 has two components: date and time.
- The date has a range from January 01, 01 (0001-01-01) to December 31, 9999 (9999-12-31)
- The time has a range from 00:00:00 to 23:59:59.9999999.
The storage size of a DATETIME2 value depends on the fractional seconds precision. It requires 6 bytes for the precision that is less than 3, 7 bytes for the precision that is between 3 and 4, and 8 bytes for all other precisions.
The default string literal format of the DATETIME2 is as follows:
YYYY-MM-DD hh:mm:ss[.fractional seconds]
Code language: SQL (Structured Query Language) (sql)In this format:
YYYYis a four-digit number that represents a year e.g., 2018. It ranges from 0001 through 9999.MMis a two-digit number that represents a month in a year e.g., 12. It ranges from 01 to 12.DDis a two-digit number that represents a day of a specified month e.g., 23. It ranges from 01 to 31.hhis a two-digit number that represents the hour. It ranges from 00 to 23.mmis a two-digit number that represents the minute. It ranges from 00 to 59.ssis a two-digit number that represents the second. It ranges from 00 to 59.- The fractional seconds is zero to a seven-digit number that ranges from 0 to 9999999.
SQL Server DATETIME2 example
The following statement creates a new table that has a created_at column whose data type is DATETIME2:
CREATE TABLE production.product_colors (
color_id INT PRIMARY KEY IDENTITY,
color_name VARCHAR (50) NOT NULL,
created_at DATETIME2
);
Code language: SQL (Structured Query Language) (sql)To insert the current date and time into the created_at column, you use the following INSERT statement with the GETDATE() function:
INSERT INTO production.product_colors (color_name, created_at)
VALUES
('Red', GETDATE());
Code language: SQL (Structured Query Language) (sql)The GETDATE() function is similar to the NOW() function in other database systems such as MySQL
To insert a literal value into the DATETIME2 column, you use the following statement:
INSERT INTO production.product_colors (color_name, created_at)
VALUES
('Green', '2018-06-23 07:30:20');
Code language: SQL (Structured Query Language) (sql)If you want to set the default value of the created_at column to the current date and time, you use the following ALTER TABLE statement:
ALTER TABLE production.product_colors
ADD CONSTRAINT df_current_time
DEFAULT CURRENT_TIMESTAMP FOR created_at;
Code language: SQL (Structured Query Language) (sql)In this statement, we use CURRENT_TIMESTAMP as the default value for the created_at column. Note that the CURRENT_TIMESTAMP returns the same value as the GETDATE() function.
Now, when you insert a new row to the table without specifying the value for the created_at column, SQL Server will use the current date and time value for that column:
INSERT INTO production.product_colors (color_name)
VALUES
('Blue');
Code language: SQL (Structured Query Language) (sql)In this tutorial, you have learned how to use the SQL Server DATETIME2 data type to store both date and time data in a table.