排序按服务器的小时排序

时间:2014-01-29 10:06:56

标签: sql select sql-order-by

我有一张表CLIENT_HOUR

CLIENT_ID(varchar)  THE_TIME(time 7)   HOUR_MIN   HOUR_MAX
850505              09:00:00.0000000   6          9
850505              12:00:00.0000000   10         12
850505              15:00:00.0000000   13         15
850505              18:00:00.0000000   16         18

我想根据计算机上的小时排序。 例: 计算机的时间是< 9然后列出小时9,...
9个计算机的时间是< 12然后列出12小时,...
12所取代;计算机的时间是< 15然后列出15小时,...
15 - ;计算机的时间是< 18然后上市时间18,....

这意味着我想显示与计算机小时相对应的第一个元素。

我正在使用C#4.0和SQL Server 2008 R2。我不知道我是否可以在SQL或C#中执行此操作。 我更喜欢SQL。

1 个答案:

答案 0 :(得分:0)

我假设您正在使用C#构建SQL语句。

可能有一种方法可以从SQL中的CURRENT_TIMESTAMP中检索一小时,但目前我无法访问MS SQL来试用它。

我主要用VB.NET编写,所以这里是我通常用来构建SQL语句的代码。

Dim SQLString As String = String.Format("SELECT * FROM CLIENT_HOUR WHERE HOUR_MIN >= {0} AND HOUR_MAX <= {1}", Now.AddHours(-3).Hour, Now.Hour)

当时间是在午夜和凌晨3点之间时,这是一个明显的问题。此外,您似乎想要根据3小时的时间块进行选择。

你可以用这个

        Dim SQLString As String
        Select Case Now.Hour
            Case 0 To 3
                SQLString = "SELECT * FROM CLIENT_HOUR WHERE HOUR_MIN >= 0 AND HOUR_MAX <= 3"
            Case 4 To 6
                SQLString = "SELECT * FROM CLIENT_HOUR WHERE HOUR_MIN >= 4 AND HOUR_MAX <= 6"
        End Select

您也可以编写一个T-SQL并将C#中的小时作为参数传递给函数,但您也可以在C#中构建SQL并直接调用它。

Convert VB.NET To C#