sql按datetime排序,然后按字符串排序

时间:2012-12-07 15:36:23

标签: sql

我有一个varchar列,我有日期时间值和现在的字符串值。我需要按日期时间值排序并列出底部的所有字符串值。我有以下日期时间:

ORDER BY CAST(q2.[Due Date] AS DATETIME) 

但是我的结果在整个结果中都有“暂停”的值。我需要将“暂停”放在列表的底部。

2 个答案:

答案 0 :(得分:2)

不确定您的平台是什么,但在SQL Server中您只需编写:

SELECT q2.[Due Date]
FROM yourTable q2
ORDER BY ISDATE(q2.[Due Date]) DESC;

答案 1 :(得分:2)

如果唯一的非日期值是“暂停”,那么这应该适用于大多数SQL引擎:

order by (case when q2.[Due Date] = 'On Hold' then 0 else 1 end) desc,
         (case when q2.[Due Date] <> 'On Hold' then cast(q2.[Due Date] as datetime) end)

我建议,如果您将日期存储为字符串,请使用格式'YYYY-MM-DD HH:MI:SS'。这样您就可以对它们进行排序而无需进行转换。

如果它们采用这种格式,您可以使用以下内容:

order by (case when left([Due Date], 1) between '0' and '9' then 0 else 1 end),
         [Due Date]

(按[截止日期]排序在大多数情况下都有效,因为数字在字母之前排序。但是,任意字符串可以从其他非字母字符开始。)

相关问题