SQL Server 2008 TIME的精度可以降低到几小时和几分钟吗?

时间:2010-11-22 15:57:11

标签: sql sql-server-2008 time precision

对于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类型允许您将字段定义为“只是日期,没有时间组件”的方式非常相似。

4 个答案:

答案 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)