【问题标题】:SQL-Server Time data typeSQL-Server 时间数据类型
【发布时间】:2015-12-10 12:44:09
【问题描述】:

从我目前阅读的内容来看,sql server 中的数据类型time(从 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')

我对@9​​87654324@ 列的预期结果是:

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(0),它会将数据存储为 HH:MM:SS。 TIME 支持 0 到 7,它设置秒的小数部分的精度。不幸的是,您无法存储没有秒数的时间。您将需要在表示层中重新格式化您的数据。 msdn.microsoft.com/en-GB/library/bb677243.aspx

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


【解决方案1】:

您似乎对 internal 格式和 display 格式之间的区别感到困惑。 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 将值作为您想要的格式的字符串获取。

【讨论】:

  • 如果您确实更改了表格,您应该将新列设为计算字段。
【解决方案2】:

您无法控制数据类型的存储格式。您的时间数据实际上被存储为一堆位 - 0 和 1 - 并且它只是在您的查询分析器中像10:01:00.00000 一样显示

如果您想以另一种格式显示它,则必须将其转换为文本数据类型,例如 varchar,但这通常是您的 UI 层应该处理的,而不是您的数据层。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    • 2019-11-16
    • 2017-12-31
    相关资源
    最近更新 更多