1

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

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

但是我的结果在我的整个结果中都具有“保留”值。我需要将“等待”放在列表的底部。

4

2 回答 2

2

不确定你的平台是什么,但在 SQL Server 中你可以写:

SELECT q2.[Due Date]
FROM yourTable q2
ORDER BY ISDATE(q2.[Due Date]) DESC;
于 2012-12-07T15:37:49.013 回答
2

如果唯一的非日期值是 'On Hold',那么这应该适用于大多数 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]

(在大多数情况下,仅按 [到期日期] 排序即可,因为数字在字母之前排序。但是,任意字符串可以以其他非字母字符开头。)

于 2012-12-07T15:42:08.130 回答