如何在SQL Server Management Studio中拆分日期时间列为日期和时间列?
在SQL Server中拆分合并的日期时间列
情况1:原列是datetime/datetime2类型(推荐方式)
如果你的「Date-Time」列是SQL Server标准的日期时间类型(datetime或datetime2),直接通过类型转换提取日期和时间是最可靠的,无需字符串拆分:
- 先新增用于存储日期和时间的列(避免用
Date/Time这类关键字作为列名):
ALTER TABLE 你的表名 ADD RecordDate DATE, RecordTime TIME;
- 填充新增列的数据:
UPDATE 你的表名 SET RecordDate = CAST([Date-Time] AS DATE), RecordTime = CAST([Date-Time] AS TIME);
注:因为列名包含特殊字符「-」,所以需要用方括号
[]包裹列名。
情况2:原列是字符串类型(VARCHAR/CHAR)
如果「Date-Time」列是字符串格式,可通过字符串函数拆分后转换类型:
- 新增列:
ALTER TABLE 你的表名 ADD RecordDate DATE, RecordTime TIME;
- 拆分并填充数据:
UPDATE 你的表名 SET RecordDate = CAST(LEFT([Date-Time], CHARINDEX(' ', [Date-Time]) - 1) AS DATE), RecordTime = CAST(SUBSTRING([Date-Time], CHARINDEX(' ', [Date-Time]) + 1, LEN([Date-Time])) AS TIME);
可选:自动同步的计算列
如果希望新增列自动跟随原列的变化更新,可创建持久化计算列,无需手动执行UPDATE:
ALTER TABLE 你的表名 ADD RecordDate AS CAST([Date-Time] AS DATE) PERSISTED, RecordTime AS CAST([Date-Time] AS TIME) PERSISTED;
PERSISTED关键字会将计算结果存储在表中,避免每次查询都重新计算,提升性能。
内容的提问来源于stack exchange,提问作者Ertuğrul Pakdamar
相关产品推荐
相关产品推荐

