如何在SQL Server 2000中对Varchar日期进行排序

时间:2011-02-05 08:29:03

标签: sql sql-server

我的表架构(表名称库存)

字段

Date Datetime

如果Date的数据类型为Datetime,则SQL Server会按照井/完美顺序对日期进行排序。见下面的例子。

select date from stock order by date

然后结果是:

Date(yyyy/MM/dd)
2010-04-02 00:00:00.000
2011-02-02 00:00:00.000
2011-02-03 00:00:00.000
2011-02-03 00:00:00.000

但是如果我要通过转换varchar来进行排序,那么它最终会产生问题,问题是它不会按日期顺序排序,因为它现在在Varchar中进行转换。

请看下面的例子:

select date = convert(varchar, date, 103) from stock order by date

然后结果是:

Date(dd/MM/yyyy)
02/02/2011
02/04/2010
03/02/2011
03/02/2011

您可以看到第二个查询的结果是它不会按顺序排序日期,因为它现在不是datetime数据类型。它是作为varchar进行转换,或者你可以将其称为字符串。

现在说到:

如果我想按日期排序以varchar顺序排序的日期而不是如何进行排序?。

3 个答案:

答案 0 :(得分:7)

您正在做的是将varchar转换为varchar,然后按此排序......您没有按日期排序!

convert(varchar, date, 103)
       *********

此类型是您将价值转换为 - 您将转换为varchar - 当然它不会按日期排序!

请改为尝试:

SELECT CONVERT(DATETIME, date, 103) 
FROM dbo.Stock 
ORDER BY CONVERT(DATETIME, date, 103) 

现在您实际上已将varchardate转换为DATETIME值,并对生成的DATETIME进行排序 - 现在你得到了输出:

2010-04-02 00:00:00.000
2011-02-02 00:00:00.000
2011-02-03 00:00:00.000
2011-02-03 00:00:00.000

更新:如果您需要其他格式,您当然可以使用不同风格的DATETIMEVARCHAR再次转换回CONVERT

阅读所有MSDN CAST and CONVERT

支持的样式
SELECT 
    date = CONVERT(VARCHAR, CONVERT(DATETIME, date, 103), 103)  -- convert back to VARCHAR
FROM 
    dbo.Stock 
ORDER BY 
    CONVERT(DATETIME, date, 103)   -- sort by the DATETIME !

然后你得到这个输出:

02/04/2010
02/02/2011
03/02/2011
03/02/2011

只需确保对 DATETIME 值进行排序! (不是DATETIME)的字符串表示

正如我所说:如果你从一开始就把你的日期存储为DATETIME,你就可以来回保存很多这些转换!!

答案 1 :(得分:1)

您可以按如下方式使用子查询

select convert(varchar,date,103) date from (select date from stock order by date)p

答案 2 :(得分:0)

这个对我有用:

SELECT date FROM stock ORDER BY CAST(date AS DATE)