在 SQL Server 中将 varchar 'hh:mm:ss' 转换为 datetime hh:mm:ss
Posted
技术标签:
【中文标题】在 SQL Server 中将 varchar \'hh:mm:ss\' 转换为 datetime hh:mm:ss【英文标题】:Convert varchar 'hh:mm:ss' to datetime hh:mm:ss in SQL Server在 SQL Server 中将 varchar 'hh:mm:ss' 转换为 datetime hh:mm:ss 【发布时间】:2021-11-28 09:47:10 【问题描述】:我尝试将我的数据库中存储为HH:MM:SS
的varchar
变量转换为实际的datetime
格式HH:MM:SS。我确实得到了 HH:MM:SS 的值,但尝试还加上了 YYYY:MM:DD 的前缀以及预期的结果。
以下是我用来将此 varchar
值转换为 HH:MM:SS 的代码以及我得到的结果。
我试过的代码:
DECLARE @Duration Varchar(10)
SET @Duration = '00:01:23'
SELECT CONVERT(datetime, Duration, 8) AS duration
我得到的输出:
1900-01-01 00:01:23.000
预期输出:
00:01:23
请让我知道需要更改的内容。谢谢!
【问题讨论】:
预期是错误的。这不是一个日期时间,它只是一个时间。持续时间不是日期。这些也不是前缀 -datetime
、date
、time
等是 binary 类型,而不是字符串
看来你想要的是时间数据类型而不是日期时间数据类型
【参考方案1】:
如果你想要time
,你为什么要转换成datetime
?鉴于名称,您同时获得日期和时间也就不足为奇了。试试:
DECLARE @Duration char(8) = '00:01:23';
SELECT duration = CONVERT(time(0), @Duration);
结果:
duration |
---|
00:01:23 |
请记住,time
(也不是任何日期/时间类型)不是表示持续时间或间隔。因为当您的持续时间或间隔超过 24 小时时会发生什么?
【讨论】:
SQL Server 还没有合适的区间类型有点……不寻常 @PanagiotisKanavos 是的,但公平地说,添加类型很难。 2008 年添加的类型并没有完美的记录,从那以后他们也没有尝试过。 感谢大家的及时帮助。我对此有点困惑,但是您的代码对我有所帮助。再次感谢!【参考方案2】:您发布的是时间,而不是日期或日期时间。持续时间不是日期。日期类型是二进制的,它们没有前缀。
你可以直接定义时间:
Declare @Duration time ='00:01:23'
或者您可以将字符串转换为时间:
Declare @Duration varchar(10)
Set @Duration = '00:01:23'
Select cast(@Duration as time) as duration
或
Declare @Duration varchar(10)
Set @Duration = '00:01:23'
Select convert(time, @Duration,8) as duration
很遗憾这不是持续时间,而是一天中的某个时间。它只能存储00:00
和23:59:59.9999999
之间的值。
SQL Server 没有间隔/持续时间类型。
【讨论】:
感谢您的帮助!这些 cmets 帮助了我很多!【参考方案3】:Declare @Duration Varchar(10)
Set @Duration = '00:01:23'
select convert(time,@duration,8);
【讨论】:
感谢您的回答! :)以上是关于在 SQL Server 中将 varchar 'hh:mm:ss' 转换为 datetime hh:mm:ss的主要内容,如果未能解决你的问题,请参考以下文章
在没有科学计数法的 SQL Server 中将 float 转换为 varchar
在 SQL Server 2008 中将数据从浮点类型的 Excel 导入 varchar
在 SQL Server 存储过程中将 varchar 转换为 int 时出错
在 SQL Server 2008 R2 中将 varchar 转换为时间戳