加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 08:37:46 所属栏目:MsSql教程 来源:网络整理
导读:这是一个或多或少的完美的缘故. Microsoft SQL Server仅包含用于存储日期和时间的字段类型datetime. 但是让我们说,我想存储一个营业时间表,其日期完全不相关.目前我正在使用datetime类型,然后只显示数据的时间部分.但是我有两个问题. 看起来笨拙的效率低下 它
这是一个或多或少的完美的缘故.

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

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

看起来笨拙的效率低下
>它可能会混淆未来的开发人员看到一个完整的日期随着时间的推移,他们可能不知道是否在任何地方使用.

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

更新:它是SQL Server 2005.(另外,我只想知道当没有时间类型时一般做什么).

解决方法

对于SQL Server 2005或更早版本…

如果你只想知道一分钟,你可以将其存储为1-1440范围内的int. 1是00:01,1440是0:00.

如果你喜欢,会很容易做一次显示:

SELECT CAST((605/60)as varchar)’:’RIGHT(‘0’CAST((605%60)as varchar),2)

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

TIME每行使用3-5个字节,smallint是每行2个字节.

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

编辑

这是更复杂的秒,但仍然可行我应该考虑…

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读