按DATE字符串排序MSSql

时间:2016-12-01 14:42:05

标签: sql sql-server tsql

按日期排序会产生错误的输出。输入的日期被输入并存储为字符串或者更确切地说是Varchar(50),所以当我对它进行排序时,它只需要示例“22-11-2016”的第一部分,所以“22”。太澄清了:这就是我的意思:

enter image description here

使用以下查询字符串:

SELECT TOP 1 CHECKEDIN, DATE
FROM timereg
WHERE UNILOGIN = @unilogin
ORDER BY DATE DESC, TIME DESC

并且显然第9列应该在顶部,因为它是在那个月晚些时候。 我将如何以某种方式将其转换为日期时间并对其进行排序以使其实际工作,或者只是在整个字符串之后排序。

-Thanks

3 个答案:

答案 0 :(得分:4)

将您的varchar转换为实际日期

... ORDER BY convert(date,DATE,103) DESC 

答案 1 :(得分:1)

尝试

> gr.data
GRanges object with 10505026 ranges and 1 metadata column:
         seqnames                 ranges strand |      value
            <Rle>              <IRanges>  <Rle> | <numeric>
     [1]     chr1         [10468, 10468]      + |         0
     [2]     chr1         [10469, 10469]      - |         1
     [3]     chr1         [10470, 10470]      + |       0.5
     [4]     chr1         [10471, 10471]      - |         1
     [5]     chr1         [10483, 10483]      + |       0.6

答案 2 :(得分:0)

您几乎肯定会受到性能影响,但您可以尝试在排序时将列转换为日期类型。

Order by  CONVERT(Datetime, [date], 103) Desc, time DESC