SQL-Server 时间数据类型

标签 sql sql-server time sql-server-2012

据我目前所读,sql server(从 2008 年开始)中的数据类型 time 应该能够以 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 中,用于 HHMMSS 可能在 sql server 2005 之前使用过。

使用 sql server 2012。谢谢

最佳答案

您似乎对内部 格式和显示 格式之间的差异感到困惑。 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 将值作为具有您想要的格式的字符串获取。

关于SQL-Server 时间数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34202223/

相关文章:

sql - 水平联合选择语句

java - Android更改表示时间和日期的字符串的格式

c++ - 以纳秒为单位存储时间戳 C++

java - 根据特殊组 hql 中列的最大值有条件更新

SQL Server 2008 包含列

php - Mysql 中的 REGEP 减慢查询

sql - TSQL : How do I search for a grade within a list of grades?

mysql - 输出数据自激活之日起一年以上

sql - 如何查询精度过高的美元金额?

c - 在 Linux 上以编程方式获取函数的总时间和忙碌时间