我有一个 varchar 列,其中包含日期时间值和现在的字符串值。我需要按日期时间值排序并在底部列出所有字符串值。我有以下日期时间:
ORDER BY CAST(q2.[Due Date] AS DATETIME)
但是我的结果在我的整个结果中都具有“保留”值。我需要将“等待”放在列表的底部。
我有一个 varchar 列,其中包含日期时间值和现在的字符串值。我需要按日期时间值排序并在底部列出所有字符串值。我有以下日期时间:
ORDER BY CAST(q2.[Due Date] AS DATETIME)
但是我的结果在我的整个结果中都具有“保留”值。我需要将“等待”放在列表的底部。
不确定你的平台是什么,但在 SQL Server 中你可以写:
SELECT q2.[Due Date]
FROM yourTable q2
ORDER BY ISDATE(q2.[Due Date]) DESC;
如果唯一的非日期值是 '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]
(在大多数情况下,仅按 [到期日期] 排序即可,因为数字在字母之前排序。但是,任意字符串可以以其他非字母字符开头。)