从到目前为止的内容来看time
,sql server(从2008年开始)中的数据类型应该能够以HH:MM格式存储时间。然后,我通过以下简单的练习自己尝试了此操作:
create table #mytable (id int, lat float, lon float, trajectory_id int, theTime time(5)) insert into #mytable values ('1','15.8','17.1','162','10:01'), ('2','11.5','59.7','162','10:02'), ('3','16.4','79.9','162','10:03'), ('4','29.5','10.3','180','11:12'), ('5','58.2','11.1','180','11:13'), ('6','54.5','14.1','180','11:14'), ('7','14.9','15.2','166','13:40'), ('8','15.0','13.1','166','13:42')
我对该列的预期结果theTime
是:
theTime 10:01 10:02 10:03 11:12 11:13 11:14 13:40 13:42
相反,我得到的是:
theTime 10:01:00.00000 10:02:00.00000 10:03:00.00000 11:12:00.00000 11:13:00.00000 11:14:00.00000 13:40:00.00000 13:42:00.00000
当然,我可以选择left(theTime, 5)
并获得预期的结果。但我想知道如何将其直接插入所需的格式。
我想使用内置函数,而不要将数字存储在int
for HH
,中MM
,SS
因为在sql server 2005之前可能已经使用过。
使用SQL Server2012。谢谢
这个评论太长了。
您似乎对内部格式和显示格式之间的差异感到困惑。 TIME
是语言内置的数据类型。打印时,将以小时,分钟和秒打印。这就是数据类型打印出来的方式,SQL Server不会将逗号放在大于1000的整数中,而是使用适当的符号作为小数位。(或者就此而言,以10为基数输出整数,而不是实际存储的二进制格式。)
当您说TIME(5)
要在小数秒内至少保留5个小数位精度时:HH:MM:SS.SSSSS。没有选项可以从time
类型中完全删除秒。
如果你想打印出来以特定的格式,使用convert()
,cast()
或format()
。令人高兴的是,cast()
一段时间以来效果很好。日期/时间的大量难以理解的数字代码比时间更适用于日期。
当你这样做left(thetime, 5)
,那么你被隐式转换time
为字符串,并采取前五个字符。这似乎可以满足您的需求。我建议您将其构建到表中:
alter table #mytable add thetime_hhmm as (left(thetime, 5));
然后,您可以使用thetime_hhmm
所需的格式以字符串形式获取值。