繁体   English   中英

MS SQL转换日期103的订购问题

[英]MS SQL convert date 103 ordering problem

我正在尝试将此格式的Datetime从29/07/2011 00:00:00转换为2011年7月29日。 我使用SELECT语句执行此操作

SELECT CONVERT(nvarchar(10), thisDate, 103) As thisDate ... ORDER BY thisDate

这给出了这样的顺序

01/08/2011
02/08/2011
05/06/2011
08/07/2011
14/07/2011
21/06/2010
21/07/2011
23/07/2011
24/07/2011
24/07/2011

但是,当我使用101102格式时,结果是正确的,并且日期顺序正确。

您可以按DATETIME类型的字段排序。 在您的示例中,您需要重命名别名:

SELECT CONVERT(nvarchar(10), thisDate, 103) As thatDate ... ORDER BY thisDate

不要将日期时间转换为字符串-根据客户端设置,出于显示目的的转换应在客户端进行。 要订购结果集,您应该直接使用日期字段,而无需转换它,这只会浪费资源。

102样式“有效”,因为它将日期格式设置为“ yy.mm.dd”,从而“正确”排序(可以根据与日期相同的规则以字符串形式订购)。 112 (“ yyyymmdd”)和其他一些代码也是如此,但是101不能按您期望的那样工作(美国格式为“ mm / dd / yyyy”)。

您的解决方案无法正常工作,因为SQL Server尝试基于按字母顺序而不是按日期排序的文本字符串进行排序。

尝试对您的查询执行此操作:

SELECT CONVERT(nvarchar(10), thisDate, 103) As newDate, thisDate
FROM YourTable
ORDER BY thisDate ASC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM