为了完美,这里或多或少是一个.
Microsoft SQL Server仅包含datetime用于存储日期和时间的字段类型.
但是,让我们说我想存储一个营业时间列表,其中日期完全无关紧要.目前我正在使用该datetime类型,然后只显示数据的时间部分.但我有两个问题.
所以它引出了一个问题; 在没有特定time字段的情况下(如在MySQL中),从00:00到23:59只存储一天中特定时间的最佳方式是什么?
更新:它是SQL Server 2005.(另外,我只是想知道在没有time类型的情况下通常要做什么.)
对于SQL Server 2005或更早版本...
如果您只想了解分钟,可以将其存储为范围内的int 1-1440. 1是00:01而且1440是0: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)
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?
| 归档时间: |
|
| 查看次数: |
8534 次 |
| 最近记录: |