代码之家  ›  专栏  ›  技术社区  ›  David

SQL Server 2008的时间精度能否降低到只有几小时和几分钟?

  •  6
  • David  · 技术社区  · 14 年前

    使用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 回复  |  直到 14 年前
        1
  •  4
  •   Mitch Wheat    14 年前

    不,不可能降低 time 数据类型 time(0)

        2
  •  2
  •   gbn    14 年前

    使用smalldatetime并忽略日期位(它将是1900年1月1日)。它有微小的精确度。

    尽管时间很有用,但这是我们过去的做法(SQL Server 2005及以前版本:-)

        3
  •  1
  •   SubniC    14 年前
    SET @time = convert(varchar(5),getdate(),8)
    

    在这里,您将GETDATE的结果转换为VARCHAR,并使用 modifier 8这意味着时间格式。

    编辑: 这是给你一个字符串,也许不是你要找的结果。

    当做。

        4
  •  1
  •   Charles Bretana    14 年前

    如果您需要的间隔是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)