如何将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
相关产品推荐
相关产品推荐

