如何将单列日期时间拆分为两列,时间格式设为HH:mm?
可行解决方法
前提确认
先确保新增的两个列类型匹配需求:
- 日期列(比如命名为
date_column)设置为date类型 - 时间列(比如命名为
time_column)设置为time类型(若要存字符串格式的HH:mm,则设为varchar(5))
分场景处理
场景1:原数据有一个包含完整日期时间的字段
如果表中存在同时包含日期和时间的字段(比如original_datetime,类型为datetime或格式合规的字符串),直接从该字段提取对应值存入新列:
-- 更新日期列 UPDATE [dbo].[YearlyView] SET [date_column] = CONVERT(date, [original_datetime]) -- 更新时间列 UPDATE [dbo].[YearlyView] SET [time_column] = CONVERT(time, [original_datetime])
如果原字段是字符串(格式为MM-dd-yyyy HH:mm),先转成datetime再提取:
UPDATE [dbo].[YearlyView] SET [date_column] = CONVERT(date, CONVERT(datetime, [original_string], 101)), [time_column] = CONVERT(time, CONVERT(datetime, [original_string], 101))
(注:101是SQL Server中对应MM-dd-yyyy格式的转换代码)
场景2:原time_column存储的是完整日期时间值
如果time_column原本存的是带日期的datetime值,想只保留时间部分,直接转换类型即可(无需FORMAT,避免字符串隐式转换问题):
UPDATE [dbo].[YearlyView] SET [time_column] = CONVERT(time, [time_column])
若必须存成HH:mm格式的字符串,先确保time_column是varchar类型,再执行:
UPDATE [dbo].[YearlyView] SET [time_column] = FORMAT(CONVERT(datetime, [time_column]), 'HH:mm')
原语句未生效的可能原因
- 若
time_column是time类型,FORMAT返回的字符串会触发隐式转换,格式不匹配时会导致无变化或报错 - 若原字段值本身就是纯时间(比如
18:56),转datetime/time后再格式化,结果和原值一致,看起来像未生效
内容的提问来源于stack exchange,提问作者Louis A
相关产品推荐
相关产品推荐

