我想将我的表格视为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)
我现在需要做什么?
答案 0 :(得分:1)
正如您在评论中提到的,您已经意识到您的date
字段位于nvarchar
。
现在你需要关注几件事:
date
字段迁移到DateTime
数据类型。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不是有效月份,因此是您的错误。)
因此,您需要遵循此特定日期格式,然后使用上述查询。
希望这有帮助。