对于SQL Server 2008,time
数据类型具有可选的精度参数(默认值为7)。使用此功能,您可以控制存储和显示的小数位数。
DECLARE @time time(3)
SET @time = GETDATE()
PRINT @time
上面会打印出来,
10:47:25.347
文档说最小精度为time(0)
。这将存储并打印10:47:25
。
是否可以进一步降低精度,消除/清零秒:10:47
?
我知道这可以通过添加约束(DATEPART(seconds, @time) = 0
)手动完成,对数据输入执行数学运算以将秒数归零,并在打印时手动格式化,但我正在寻找一种简单的方法来定义表格中的字段为“小时和分钟”,与date
类型允许您将字段定义为“只是日期,没有时间组件”的方式非常相似。
答案 0 :(得分:4)
没有。除了time
time(0)
数据类型的精度
答案 1 :(得分:2)
使用smalldatetime并忽略日期位(它将是1900年1月1日)。它具有微小的准确性。
随着时间的推移,这就是我们在过去的日子里所做的事情(SQL Server 2005以及之前: - )
答案 2 :(得分:1)
SET @time = convert(varchar(5),getdate(),8)
在这里,您将GETDATE的结果转换为VARCHAR,并使用modifier 8格式化它,这意味着时间格式。
编辑:这会给你一个字符串,也许不是你要找的结果。
问候。
答案 3 :(得分:1)
如果您想要的时间间隔是SQL Server识别的时间间隔之一(分钟,小时,日等等),那么您可能会考虑另一个选项,那就是您定义自己的数据类型,(比如说你想要几个小时),然后将它存储为一个整数,它只是一个 绝对 小时数,从一些基准参考时间开始(或使用与SQL Server相同的基准参考时间(1900年1月1日午夜) )
使用以下内容将存储的整数值(@IntVal
)转换为实际小时作为日期时间(@realDT
)。 (假设@baseDatetime
被定义为基准时间
Declare @baseDatetime smalldatetime
Set @baseDatetime = 0 -- for 1 Jan 1900, or
Set @baseDatetime = 'd Month yyyy' for some other base
@realDT->@IntVal: @IntVal = DateDiff(hour, @baseDatetime, @realDT)
@IntVal->@realDT: @realDT = DateAdd(hour, @IntVal, @baseDatetime)