SQL Server 日期时间科普

前言

在SQL Server数据库中,日期和时间是常见的数据类型。在许多应用程序中,我们需要存储和处理日期和时间数据,例如记录操作时间、制定排班计划等。本文将介绍SQL Server中的日期时间类型以及相关操作,以帮助你更好地处理日期时间数据。

SQL Server日期时间类型

SQL Server提供了多种日期时间类型,每种类型都有不同的精度和范围。以下是SQL Server中常用的日期时间类型:

  1. DATE:存储日期,精确到天。范围从0001年1月1日到9999年12月31日。

    CREATE TABLE Example (
        date_value DATE
    );
    
  2. TIME:存储时间,精确到毫秒。范围从00:00:00.0000000到23:59:59.9999999。

    CREATE TABLE Example (
        time_value TIME
    );
    
  3. DATETIME:存储日期和时间,精确到毫秒。范围从1753年1月1日到9999年12月31日。

    CREATE TABLE Example (
        datetime_value DATETIME
    );
    
  4. SMALLDATETIME:存储日期和时间,精确到分钟。范围从1900年1月1日到2079年6月6日。

    CREATE TABLE Example (
        smalldatetime_value SMALLDATETIME
    );
    
  5. DATETIME2:存储日期和时间,精确到100纳秒。范围从0001年1月1日到9999年12月31日。

    CREATE TABLE Example (
        datetime2_value DATETIME2(7)
    );
    
  6. DATETIMEOFFSET:存储日期和时间,精确到100纳秒,并包含时区偏移量。

    CREATE TABLE Example (
        datetimeoffset_value DATETIMEOFFSET(3)
    );
    

使用日期时间函数

SQL Server提供了许多日期时间函数,用于对日期时间数据进行计算和处理。

获取当前日期时间

使用GETDATE()函数可以获取当前日期和时间:

SELECT GETDATE() AS current_datetime;

输出结果类似如下:

current_datetime
2022-01-01 12:34:56.789

格式化日期时间

使用CONVERT()函数可以将日期时间类型转换为特定格式的字符串:

SELECT CONVERT(VARCHAR(20), GETDATE(), 120) AS formatted_datetime;

输出结果类似如下:

formatted_datetime
2022-01-01 12:34:56

上述代码中,120代表日期时间的格式,具体格式可以参考[官方文档](

比较日期时间

使用DATEDIFF()函数可以计算两个日期之间的差值:

SELECT DATEDIFF(HOUR, '2022-01-01 10:00:00', '2022-01-01 12:00:00') AS hour_diff;

输出结果为:

hour_diff
2

上述代码中,HOUR代表计算的单位,可以是YEARMONTHDAYHOUR等。

操作日期时间

使用DATEADD()函数可以在日期时间上进行加减运算:

SELECT DATEADD(DAY, 7, '2022-01-01') AS new_date;

输出结果为:

new_date
2022-01-08

上述代码中,DAY代表要增加或减少的单位,7代表增加或减少的数量。

类图

下面是SQL Server日期时间类型的类图:

classDiagram
    class DATE {
        + date_value: DATE
    }
    class TIME {
        + time_value: TIME
    }
    class DATETIME {
        + datetime_value: DATETIME
    }
    class SMALLDATETIME {
        + smalldatetime_value: SMALLDATETIME
    }
    class DATETIME2 {
        + datetime2_value: DATETIME2
    }