MS SQL转换日期103排序问题

时间:2011-08-02 01:12:49

标签: sql sql-server-2005

我正在尝试将日期时间从29/07/2011 00:00:00转换为此格式,仅为29/07/2011。我使用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格式时,结果是正确的,并且日期是正确排序的。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

不要将datetime转换为字符串 - 根据客户端设置,应在客户端进行转换以显示。对于结果集的排序,你应该直接使用日期字段,不需要转换它,这只会浪费资源。

102样式“有效”,因为它将日期格式化为“yy.mm.dd”,可以“正确”排序(可以按照与日期相同的规则按字符串排序)。 112(“yyyymmdd”)和其他一些人也是如此,但101不应该按预期工作(美国格式为“mm / dd / yyyy”)。

答案 2 :(得分:1)

您的解决方案不起作用,因为SQL服务器正在尝试根据按字母顺序排序的文本字符串进行排序,而不是按日期排序。

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

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