什么而不是CONVERT(TIME,x)Datepart?

时间:2011-12-20 00:58:50

标签: sql-server-2008

我对非常​​大的表格进行了复杂的查询。

长话短说,当我使用转换时间选择一天中的某段时间(让我们说12-13h,从日期时间行转换它)查询需要几分钟,而不是没有转换的几秒钟!

所以,我尝试了 datepart ,它运行良好,几乎是即时的,但问题是,如何同时指向小时和分钟?

任何其他快速解决方案都非常受欢迎。

感谢。

4 个答案:

答案 0 :(得分:2)

与此同时,我提出了这个问题:

DATEPART(HOUR, datetimecolumn)*100 + DATEPART(MINUTE, datetimecolumn)) between 1210 and 1540

答案 1 :(得分:1)

如果您愿意做一些数学运算,可以使用datePart,如下所示:

  • 12:10 = 12 * 60 + 10 = 730分钟
  • 15:40 = 15 * 60 + 40 = 940分钟

    选择* ..... 其中datepart(mi,datefield)介于(12 * 60 + 10)和(15 * 60 + 40)之间

答案 2 :(得分:0)

如果你有一个恒定的时期 - 即 - 总是每小时,没有任何浮动期 - 你可以引入一些类似“序数周期”的计算字段,索引和查询预先计算期间值

OR

没有任何常量句点 - 尝试在SELECT语句之前计算正确的开始值和结束值,并在查询中使用它们。

请记住,在查询的where子句中使用函数 - 有时候是个坏主意。使用ORDER BY子句中的函数 - 总是错误的

答案 3 :(得分:0)

您可以通过以下功能获取GETTIME

alter function GetTimeOnly(@_DateTime DateTime)
returns datetime
as
    begin
    return dateadd(day, -datediff(day, 0, @_datetime), @_datetime)
    end
go

或者你可以从转换功能中获得时间。

SELECT
CONVERT(VARCHAR(8),GETDATE(),108) AS HourMinuteSecond,
CONVERT(VARCHAR(8),GETDATE(),101) AS DateOnly