SQL Server:最佳的存储时间方式(无日期)

Tee*_*kin 11 sql sql-server

为了完美,这里或多或少是一个.

Microsoft SQL Server仅包含datetime用于存储日期和时间的字段类型.

但是,让我们说我想存储一个营业时间列表,其中日期完全无关紧要.目前我正在使用该datetime类型,然后只显示数据的时间部分.但我有两个问题.

  1. 这似乎效率低下.
  2. 它可能会让未来的开发人员感到困惑,因为他们可能不知道是否在任何地方使用了这个时间.

所以它引出了一个问题; 在没有特定time字段的情况下(如在MySQL中),从00:00到23:59只存储一天中特定时间的最佳方式是什么?

更新:它是SQL Server 2005.(另外,我只是想知道在没有time类型的情况下通常要做什么.)

JNK*_*JNK 7

对于SQL Server 2005或更早版本...

如果您只想了解分钟,可以将其存储为范围内的int 1-1440. 1是00:01而且14400:00.

如果您愿意,可以轻松再次显示:

SELECT CAST((605 / 60) as varchar) + ':' + RIGHT('0' + CAST((605 % 60) as varchar), 2)

另一个优点是,如果使用smallint数据类型,则每个记录从内置数据类型中保存1-3个字节TIME.

TIME每行使用3-5个字节,每行smallint2个字节.

我相信额外的字节是秒和小数秒.

编辑

它会更复杂的秒,但仍然可行,我应该想...

1-86400范围(每天秒数)

DECLARE @i INT
SET @i = 3661

SELECT RIGHT('0' + CAST((@i / 3600) as varchar),2) --hours
+ ':' + RIGHT('0' + CAST((@i % 3600)/60 as varchar), 2) -- minutes
+ ':' + RIGHT('0' + CAST((@i % 3600)%60 as varchar), 2) -- seconds
Run Code Online (Sandbox Code Playgroud)


Kie*_*one 6

SQL Server 2008有一个TIME数据类型:

http://www.sql-server-performance.com/2007/datetime-2008/

DECLARE @dt as TIME
SET @dt = getdate()
PRINT @dt
Run Code Online (Sandbox Code Playgroud)

升级到SQL 2008?