【问题标题】:SQL Server -Order BYSQL Server -Order BY
【发布时间】:2016-06-15 17:01:04
【问题描述】:

我在表中有一个字段是 varchar(12),但是该字段中的数据是一个日期 - 2016 年 1 月 1 日(我有大约 5,000 个日期)。我一直在尝试做一个 ORDER BY,但它似乎没有按日期订购。如果它不是 DateTIME 字段,我将如何在该字段上执行 ORDER BY??

【问题讨论】:

  • 使用正确的数据类型就不会出现这些问题。你为什么用varchar而不是date
  • 你能提供你正在尝试的查询吗?那么你就会得到正确的答案。
  • Select firstName, LastName, ServiceStart, ServiceEnd from TblClients order by ServiceEnd desc。但是vercelli已经回答了,所以一切都准备好了。谢谢!

标签: sql sql-server date sql-order-by varchar


【解决方案1】:

试试:

Order by cast(Field as datetime)

【讨论】:

  • @LD16 很高兴它有帮助。戈登林诺夫有一个很好的观点。也检查他的答案。
【解决方案2】:

使用CAST() 转换诸如“1/1/2016”之类的日期取决于本地化设置。

假设值是 MM/DD/YYYY 格式(有些国家确实使用 DD/MM/YYYY),那么写成这样更安全:

order by convert(datetime, field, 101)

然后,如果字段与此格式不完全匹配,您将面临转换可能失败的风险。为防止出现此错误,SQL Server 2012+ 提供了try_convert()

所以,我认为最好的方法是:

order by try_convert(datetime, field, 101)

【讨论】:

  • 。 . . 101 是什么?
  • 这是SQL Server在引入format()之前用来格式化日期的傻方法。这是一个神奇的代码,记录在msdn.microsoft.com/en-us/library/ms187928.aspx
  • 谢天谢地,我只需要它来查询以后复制的重要数据。我没有制作任何存储过程或在代码中重用它。谢谢你!
猜你喜欢
  • 2012-11-29
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-16
  • 2017-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多