我有一个varchar列,我有日期时间值和现在的字符串值。我需要按日期时间值排序并列出底部的所有字符串值。我有以下日期时间:
ORDER BY CAST(q2.[Due Date] AS DATETIME)
但是我的结果在整个结果中都有“暂停”的值。我需要将“暂停”放在列表的底部。
答案 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]
(按[截止日期]排序在大多数情况下都有效,因为数字在字母之前排序。但是,任意字符串可以从其他非字母字符开始。)