SQL Server中的日期排序无法正确显示

时间:2016-12-16 06:27:15

标签: sql-server date

我想将我的表格视为order by date

我写了这个命令

select * 
from companydetails 
order by date desc

输出:

  

2013年4月1日30-11-16   30-11-16   29-11-16 28-11-16 27-09-16 27-01-2014   26-11-16 26-07-14 24-02-15 23-09-15 23-03-15 21-10-15 21-01-16   20-08-15 18-11-15 18-03-15 17-08-16 17-04-14 16-09-14 15-02-14   15-02-14 15-02-14 15-02-14 15-02-14 15-02-14 15-02-14 14-11-14   14-08-14 12-02-14 12-01-2013 11-03-16 09-10-15 08-12-15 06-01-16   04-01-2013 03-01-14 02-10-15 02-09-14 02-09-14 01-12-15 01-12-14   01-12-14 01-10-15 01-10-15 01-10-14 01-09-15 01-09-15 01-09-14   01-09-14 01-09-14 01-09-14 01-08-15 01-08-14 01-08-14 01-07-15   01-06-15 01-06-15 01-04-2014 01-04-14 01-04-14 01-04-14 01-04-14   01-04-13 01-04-13 01-04-13 01-04-13 01-04-13 01-04-13 01-04-13   01-04-13 01-04-13 01-04-13 01-04-13 01-04-13 01-04-13 01-04-13   01-04-13 01-04-13 01-04-13 01-04-13 01-04-13 01-04-13 01-04-13   01-04-13 01-04-13 01-04-13 01-04-13 01-03-16 01-03-14 01-03-14   01-02-16 01-02-15 01-01-15 01-01-15 01-01-14 NULL

这不是我需要的,这只是订购日,我在网上谷歌并发现了这个

SELECT * 
FROM 
     companydetails 
ORDER BY 
   CONVERT(DateTime, date,105)  DESC

但是这会引发错误

  

从字符串转换日期时转换失败。

当我选择修改我的表格时,我发现我的优秀创建日期为nvarchar(50)我现在需要做什么?

3 个答案:

答案 0 :(得分:1)

正如您在评论中提到的,您已经意识到您的date字段位于nvarchar

现在你需要关注几件事:

  1. 是否有任何读/写此表的应用程序/网站/报告?
    • 如果是:除非您可以控制所有源/其他,否则修改数据库将非常繁琐。
    • 如果否:请考虑将您的date字段迁移到DateTime数据类型。
  2. 是否要迁移date字段的数据类型?
    • 如果是:您在date字段中的日期格式不一致。您需要找出它的位置,将其更新为1并且只有1种格式(yy-MM-dd或yyyy-MM-dd)或者更适合您的任何格式。然后,您可以将此字段转换为DateTime数据类型。
    • 如果否:即使您的数据一致,在您安排时也不会遵循日期时间顺序,而是按照字母顺序排列,这有时会在某处给您错误的订单。 因此,要使用此CONVERT(DateTime, date,105) DESC,您需要先将数据编辑为1种相同的格式。例如,我可以看到这两条记录不一致:01-06-15& 01-04-2014

答案 1 :(得分:0)

让我们假设您更改了列中的数据并使其与评论中所述的一致。 然后试试这个: -

SELECT CAST(Column_Name as datetime2(7)) from tablename;

答案 2 :(得分:0)

由于用于存储日期时间的数据类型是NVARCHAR。 为此,您将其转换为DATE或DATETIME。

select * from companydetails order by CAST(date as DATE) desc

根据SQL Server的要求,用于存储的日期格式不一致。

从您的输出: 30-11-16是一种日期格式。不是MM-DD-YYYY格式。

01-04-13是另一种格式。即使现在这是一种有效的格式,它也会将它作为1月4日与4月1日的预期值(我假设)相对应。

服务器在30-11-16处抛出错误,因为它采用MM-DD-YYYY格式(但30不是有效月份,因此是您的错误。)

因此,您需要遵循此特定日期格式,然后使用上述查询。

希望这有帮助。