1. MSSQL中时间数据类型
MSSQL支持多种时间数据类型,其中最基本的有datetime、date、time三种类型。
1.1 datetime类型
datetime类型存储日期和时间,精度为1/300秒,字段长度为8字节,其中前4字节存储日期,后4字节存储时间。
CREATE TABLE test_table (
id INT IDENTITY PRIMARY KEY,
datetime_col DATETIME
)
1.2 date类型
date类型只存储日期,不存储时间,精度为1天,字段长度为3字节。
CREATE TABLE test_table (
id INT IDENTITY PRIMARY KEY,
date_col DATE
)
1.3 time类型
time类型只存储时间,不存储日期,精度为1/300秒,字段长度为5字节。
CREATE TABLE test_table (
id INT IDENTITY PRIMARY KEY,
time_col TIME
)
2. 插入时间数据
2.1 插入当前时间
可以使用GETDATE()函数获取当前时间,将其插入datetime类型字段。
INSERT INTO test_table (datetime_col)
VALUES (GETDATE())
类似地,可以使用CURRENT_TIMESTAMP获取当前时间。
2.2 插入指定时间
如果要插入指定的时间,可以使用CAST函数将字符串转换为datetime类型。
INSERT INTO test_table (datetime_col)
VALUES (CAST('2022-01-01 12:00:00' AS DATETIME))
注意,字符串的格式必须与datetime类型的格式一致。
3. 操作时间数据
3.1 操作datetime类型数据
可以使用DATEDIFF函数计算时间差,例如计算两个时间相差的分钟数:
SELECT DATEDIFF(MINUTE, '2022-01-01 12:00:00', '2022-01-01 12:30:00')
-- 返回30
可以使用DATEPART函数获取时间的各个部分,例如获取当前小时数:
SELECT DATEPART(HOUR, GETDATE())
-- 返回当前小时数
3.2 操作date类型数据
date类型数据没有时间部分,因此不能使用DATEDIFF函数计算时间差,只能使用DATEDIFF函数计算日期差。例如计算两个日期相差的天数:
SELECT DATEDIFF(DAY, '2022-01-01', '2022-01-02')
-- 返回1
可以使用DATEPART函数获取日期的各个部分,例如获取当前月份:
SELECT DATEPART(MONTH, GETDATE())
-- 返回当前月份
3.3 操作time类型数据
可以使用DATEDIFF函数计算时间差,例如计算两个时间相差的秒数:
SELECT DATEDIFF(SECOND, '12:00:00', '12:01:00')
-- 返回60
可以使用DATEPART函数获取时间的各个部分,例如获取当前分钟数:
SELECT DATEPART(MINUTE, GETDATE())
-- 返回当前分钟数
4. 时间格式化
MSSQL支持以不同的格式输出时间数据,常用的格式包括:
'yyyy-MM-dd'
'yyyy-MM-dd HH:mm:ss'
'HH:mm:ss'
可以使用CONVERT函数将datetime、date、time类型数据按照指定格式转换为字符串。例如将datetime类型数据转换为'yyyy-MM-dd'格式的字符串:
SELECT CONVERT(VARCHAR(10), GETDATE(), 120)
-- 返回当前日期,格式为'yyyy-MM-dd'
类似地,可以将date类型数据转换为'yyyy-MM-dd'格式的字符串,将time类型数据转换为'HH:mm:ss'格式的字符串。
5. 时间区间查询
5.1 查询某一天/月/年
查询某一天的数据,可以使用WHERE子句和'yyyy-MM-dd'格式的日期字符串进行筛选:
SELECT * FROM test_table
WHERE datetime_col >= '2022-01-01' AND datetime_col < '2022-01-02'
查询某一月的数据,可以使用DATEPART函数和'yyyy-MM'格式的日期字符串进行筛选:
SELECT * FROM test_table
WHERE DATEPART(YEAR, datetime_col) = 2022 AND DATEPART(MONTH, datetime_col) = 1
查询某一年的数据,可以使用DATEPART函数和'yyyy'格式的日期字符串进行筛选:
SELECT * FROM test_table
WHERE DATEPART(YEAR, datetime_col) = 2022
5.2 查询时间段内的数据
查询某一时间段内的数据,可以使用BETWEEN操作符或者>=和<操作符进行筛选。例如查询2022年1月1日12:00:00到2022年1月2日12:00:00之间的数据:
SELECT * FROM test_table
WHERE datetime_col BETWEEN '2022-01-01 12:00:00' AND '2022-01-02 12:00:00'
SELECT * FROM test_table
WHERE datetime_col >= '2022-01-01 12:00:00' AND datetime_col < '2022-01-02 12:00:00'
6. 总结
本文介绍了MSSQL中常见的时间数据类型datetime、date、time,以及插入、操作、格式化和查询时间数据的方法。了解并掌握这些方法,可以更加高效地处理时间数据。