我已在所有表中以“dd-MMM-yyyy”格式在sql server 2008中以varchar类型存储日期。 现在我使用Union All来组合两个表的数据,并按“dd-MM-yyyy”格式按日期排序。 但不幸的是,我没有以任何升序或降序获得它。 请尽快帮忙 提前致谢
答案 0 :(得分:3)
您存储错误的日期。 不要在varchar列中存储日期!
此处的修复是更改架构以将日期放在datetime列中。然后ORDER BY很简单。
此外,如果(并且非常强大“如果”,那应该永远不会发生)你坚持将日期存储为文本,至少具有使用可排序格式的良好意义。比如标准的东西。我不知道的是ISO 8601,它将每个日期组件按降序排列。
答案 1 :(得分:0)
首先,您不应将Date
栏中的Varchar
存储为 Joel Coehoorn 建议。无论如何,你可以尝试这个查询
-- Converts to date type from varchar, then convert to dd/MM/yyyy and replace / with -
SELECT REPLACE(CONVERT(VARCHAR(11),CAST(DATECOL AS DATE),103),'/','-')
DATECOL
FROM YOURTABLE
WHERE ISDATE(DATECOL)=1
ORDER BY CAST(DATECOL AS DATE)
ISDATE(DATECOL)=1
将从您的列中检索有效日期。它将是类型安全的。
<强> SQL FIDDLE 强>
注意:您无需告诉SQL Server按您的格式订购。如果是日期类型,SQL Server将在您提供ORDER BY CAST(DATECOL AS DATE)