CM2*_*M2K 2 sql sql-server time sql-server-2012
从到目前为止的内容来看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')
Run Code Online (Sandbox Code Playgroud)
我对该列的预期结果theTime是:
theTime
10:01
10:02
10:03
11:12
11:13
11:14
13:40
13:42
Run Code Online (Sandbox Code Playgroud)
相反,我得到的是:
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
Run Code Online (Sandbox Code Playgroud)
当然,我可以选择left(theTime, 5)并获得预期的结果。但我想知道如何将其直接插入所需的格式。
我想使用内置函数,而不要将数字存储在intfor 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));
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用thetime_hhmm所需的格式以字符串形式获取值。