当前位置:  开发笔记 > 编程语言 > 正文

SQL-Server Time数据类型

如何解决《SQL-ServerTime数据类型》经验,为你挑选了1个好方法。

从到目前为止的内容来看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)并获得预期的结果。但我想知道如何将其直接插入所需的格式。

我想使用内置函数,而不要将数字存储在intfor HH,中MMSS因为在sql server 2005之前可能已经使用过。

使用SQL Server2012。谢谢



1> Gordon Linof..:

这个评论太长了。

您似乎对内部格式和显示格式之间的差异感到困惑。 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所需的格式以字符串形式获取值。

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有