一种方法是手动验证日期:
order by (case when substr(MY_DATE_COLUMN, 1, 2) between '01' and '12' and
substr(my_date_column, 3, 1) = '/' and
substr(my_date_column, 4, 2) between '01' and '31' and
substr(my_date_column, 5, 1) = '/' and
substr(my_date_column, 6, 4) between '1900' and '2100' and
len(my_date_column) = 10
then to_date(MY_DATE_COLUMN, 'mm/dd/yyyy')
end) desc
这对于大多数用途来说可能已经足够了,尽管它允许 2 月 30 日。
您真正想要的是 Oracle 中的 IsDate 函数,但它不可用。
发布后我意识到可能有更简单的方法:
order by substr(my_date_column, 6, 4) desc, substr(MY_DATE_COLUMN, 1, 2) desc,
substr(my_date_column, 4, 2) desc
它只是提取年、月和日并按降序排序。非日期将被混入,具体取决于它们包含的内容。然而,提问者似乎并不关心顺序,只是简单地消除了语法错误。