SQLserver中的日期时间

在 SQL Server 中,日期和时间数据类型用于存储日期和时间信息。这些数据类型包括 DATETIMEDATETIMEDATETIME2DATETIMEOFFSET。每种类型都有其特定的用途和存储格式。

1. DATE

  • 用途:用于存储日期信息,格式为 YYYY-MM-DD。

  • 存储大小:3 字节。

  • 范围:0001-01-01 到 9999-12-31。

2. TIME

  • 用途:用于存储时间信息,不包含日期部分。

  • 存储大小:3-5 字节(取决于精度)。

  • 范围:00:00:00.0000000 到 23:59:59.9999999。

3. DATETIME

  • 用途:用于存储日期和时间信息。

  • 存储大小:8 字节。

  • 范围:1753-01-01 到 9999-12-31 23:59:59.997。

4. DATETIME2

  • 用途:用于存储日期和时间信息,比 DATETIME 提供更高的精度和范围。

  • 存储大小:6-8 字节(取决于精度)。

  • 范围:0001-01-01 00:00:00.0000000 到 9999-12-31 23:59:59.9999999。

5. DATETIMEOFFSET

  • 用途:用于存储日期和时间信息,包含时区偏移量。

  • 存储大小:8-10 字节(取决于精度)。

  • 范围:0001-01-01 00:00:00.0000000 +- 14:00 到 9999-12-31 23:59:59.9999999 +- 14:00。

常用函数

SQL Server 提供了许多用于处理日期和时间的函数,以下是一些常用的:

  • GETDATE():返回当前日期和时间。

  • DATEADD():向日期添加指定的时间间隔。

  • DATEDIFF():计算两个日期之间的差异。

  • DATENAME():返回日期部分的名称,如年、月、日等。

  • DATEPART():返回日期的特定部分,如年、月、日等。

  • CONVERT():将日期和时间转换为不同的格式。

示例

  1. 插入当前日期和时间

INSERT INTO YourTable (DateTimeColumn)
VALUES (GETDATE());
  1. 计算日期差

SELECT DATEDIFF(day, '2024-01-01', GETDATE()) AS DaysSinceStartOfYear;
  1. 添加天数到日期

SELECT DATEADD(day, 10, '2024-08-01') AS NewDate;
  1. 格式化日期

SELECT CONVERT(VARCHAR, GETDATE(), 120) AS FormattedDate; -- 120 表示 yyyy-mm-dd hh:mi:ss(24h)
  1. 提取日期部分

SELECT DATENAME(year, GETDATE()) AS Year,
       DATENAME(month, GETDATE()) AS Month,
       DATENAME(day, GETDATE()) AS Day;

注意事项

  • 当处理日期和时间时,确保考虑时区和夏令时的影响。

  • 在进行日期运算时,了解不同数据类型之间的差异和限制。

  • 使用 DATETIME2DATETIMEOFFSET 可以避免 DATETIME 的一些精度限制。

常用的格式化日期

在 SQL Server 中,格式化日期和时间数据通常使用 CONVERT 函数或 FORMAT 函数。以下是一些常用的日期格式化示例:

使用 CONVERT 函数

CONVERT 函数可以将日期和时间数据转换为不同的格式。格式代码决定了输出的样式。

  • 格式代码 120yyyy-mm-dd hh:mi:ss(24h)(24小时制)

    SELECT CONVERT(varchar, GETDATE(), 120) AS FormattedDate;

  • 格式代码 101mm/dd/yyyy

    SELECT CONVERT(varchar, GETDATE(), 101) AS FormattedDate;

  • 格式代码 103dd/mm/yyyy hh:mi:ss(24h)

    SELECT CONVERT(varchar, GETDATE(), 103) AS FormattedDate;

  • 格式代码 104dd-mm-yyyy

    SELECT CONVERT(varchar, GETDATE(), 104) AS FormattedDate;

  • 格式代码 105hh:mi:ss(24h)

    SELECT CONVERT(varchar, GETDATE(), 105) AS FormattedTime;

  • 格式代码 110yyyy-mm-dd

    SELECT CONVERT(varchar, GETDATE(), 110) AS FormattedDate;

  • 格式代码 112yyyy/mm/dd

    SELECT CONVERT(varchar, GETDATE(), 112) AS FormattedDate;

  • 格式代码 120yyyy-mm-dd hh:mi:ss(24h)

    SELECT CONVERT(varchar, GETDATE(), 120) AS FormattedDateTime;

使用 FORMAT 函数

FORMAT 函数提供了更灵活的日期和时间格式化选项,允许你指定自定义格式字符串。

  • 自定义格式

    SELECT FORMAT(GETDATE(), 'yyyy-MM-dd HH:mm:ss');

  • 输出为日期

    SELECT FORMAT(GETDATE(), 'yyyy-MM-dd');

  • 输出为时间

    SELECT FORMAT(GETDATE(), 'HH:mm:ss');

  • 输出为星期几

    SELECT FORMAT(GETDATE(), 'dddd, dd MMMM yyyy');

  • 输出为特定文化格式

    SELECT FORMAT(GETDATE(), 'fulldate', 'de-DE'); -- 德国日期格式

注意事项

  • FORMAT 函数比 CONVERT 函数提供了更多的灵活性和自定义选项。

  • FORMAT 函数返回的是 nvarchar 类型的数据。

  • 使用 FORMAT 函数时,你可以指定文化信息来获取特定地区格式的日期和时间。

  • 22
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值