如何使用Union All with Order by订购日期

时间:2015-01-13 06:09:20

标签: sql-server-2008

我已在所有表中以“dd-MMM-yyyy”格式在sql server 2008中以varchar类型存储日期。 现在我使用Union All来组合两个表的数据,并按“dd-MM-yyyy”格式按日期排序。 但不幸的是,我没有以任何升序或降序获得它。 请尽快帮忙 提前致谢

2 个答案:

答案 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)

时自动执行此操作