SQL 日期字段(Date,DateTime,Time……)

SQL Server一共支持6种日期时间格式,分别是

  1. date
  2. datetime
  3. datetime2
  4. datetimeoffset
  5. samlldatetime
  6. time

date

date关键字定义一个日期类型,默认的字符串格式为"YYYY-MM-DD",可支持的范围为0001-01-01到9999-12-31,默认初值为1900-01-01。在数据库中占3个字节(定长)。

 转换

  time: Date类型不允许转换为Time类型

  datetime:date类型的日期部分将被赋值到datetime类型的日期部分,datetime类型的time部分将设为0。

View Code
DECLARE @date date= '12-10-25';
DECLARE @datetime datetime= @date;

SELECT @date AS '@date', @datetime AS '@datetime';

--Result
--@date      @datetime
------------ -----------------------
--2025-12-10 2025-12-10 00:00:00.000
--
--(1 row(s) affected)

 smalldatetime:当date类型的值在smalldatetime能表示的范围内是,转换跟转换到datetime一致,否则则转换失败,引发242异常,并且smalldatetime类型的目标值将设为null。

View Code
DECLARE @date date= '1912-10-25';
DECLARE @smalldatetime smalldatetime = @date;

SELECT @date AS '@date', @smalldatetime AS '@smalldatetime';

--Result
--@date      @smalldatetime
------------ -----------------------
--1912-10-25 1912-10-25 00:00:00
--
--(1 row(s) affected)

 datetimeoffset:日期部分将使用date类型的日期部分的值,时间部分将被设置为 00:00.0000000 +00:00。

View Code
DECLARE @date date = '1912-10-25';
DECLARE @datetimeoffset datetimeoffset(3) = @date;

SELECT @date AS '@date', @datetimeoffset AS '@datetimeoffset';

--Result
--@date      @datetimeoffset
------------ ------------------------------
--1912-10-25 1912-10-25 00:00:00.000 +00:00
--
--(1 row(s) affected)

datetime2(n):日期部分将使用date类型的日期部分的值,时间部分将被设置为 00:00.000000

View Code
DECLARE @date date = '1912-10-25'
DECLARE @datetime2 datetime2(3) = @date;

SELECT @date AS '@date', @datetime2 AS '@datetime2(3)';

--Result
--@date      @datetime2(3)
------------ -----------------------
--1912-10-25 1912-10-25 00:00:00.000
--
--(1 row(s) affected)

Eg:

sql脚本:

View Code
SELECT 
     CAST('2007-05-08 12:35:29. 1234567 +12:15' AS time(7)) AS 'time' 
    ,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS date) AS 'date' 
    ,CAST('2007-05-08 12:35:29.123' AS smalldatetime) AS 
        'smalldatetime' 
    ,CAST('2007-05-08 12:35:29.123' AS datetime) AS 'datetime' 
    ,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS datetime2(7)) AS 
        'datetime2'
    ,CAST('2007-05-08 12:35:29.1234567 +12:15' AS datetimeoffset(7)) AS 
        'datetimeoffset';

输出:


 

原文地址:https://www.cnblogs.com/liaotongquan/p/2812840.html