You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将NVARCHAR类型值转换为TIME类型?并获取TIMESTAMP类型结果

嘿,我来帮你搞定这两个SQL问题!先给你提个小坑:你写的declare @t NVARCHAR ='06:05:03'有个隐藏问题——NVARCHAR如果不指定长度,默认只会保留1个字符,所以@t实际存的是'0',根本不是完整的时间字符串。得改成declare @t NVARCHAR(8) ='06:05:03'(因为HH:MM:SS刚好8个字符),这样后续转换才会生效。

将NVARCHAR转换为TIME类型

有两种常用的方法,操作都很简单:

方法1:使用CAST函数

只要你的字符串是合法的HH:MM:SS格式,直接用CAST就能转:

declare @t NVARCHAR(8) ='06:05:03'
select CAST(@t AS TIME) AS ConvertedTime

执行后会返回06:05:03.0000000这样的TIME类型结果。

方法2:使用CONVERT函数

如果你的时间字符串是非标准格式(比如带AM/PM或者其他格式),可以用CONVERT配合style参数来转换。对于标准的HH:MM:SS,直接用就行:

declare @t NVARCHAR(8) ='06:05:03'
select CONVERT(TIME, @t) AS ConvertedTime
关于TIMESTAMP类型的说明

这里要特别注意:SQL Server里的TIMESTAMP类型和时间完全无关!它是ROWVERSION的同义词,是数据库自动生成的二进制数值,用来跟踪行的修改版本,不是用来存储时间戳的。

如果你想要的是包含日期+时间的时间戳结果(比如把刚才的时间和日期组合,或者获取当前时间戳),可以用下面的方法:

1. 组合日期和TIME得到完整时间戳

把当前日期和转换后的TIME拼接成DATETIME类型:

declare @t NVARCHAR(8) ='06:05:03'
select CAST(CAST(GETDATE() AS DATE) AS DATETIME) + CAST(@t AS TIME) AS FullDateTimeStamp

2. 获取Unix时间戳(秒级)

如果需要Unix格式的时间戳(从1970-01-01到现在的秒数),可以这样计算:

select DATEDIFF(SECOND, '1970-01-01 00:00:00', GETUTCDATE()) AS UnixTimestamp

内容的提问来源于stack exchange,提问作者ROSHAN JHA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:41:17