繁体   English   中英

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

[英]How to sort Varchar Date in SQL Server 2000

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

领域

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顺序排序的日期而不是如何进行排序?

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

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

这种类型就是你将你的价值转换成了 - 你转换varchar - 当然它不会按日期排序!

试试这个:

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

现在你是你的实际转换varchardateDATETIME值,并且对造成分拣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

更新:如果您需要其他格式,您当然可以使用具有不同样式的CONVERTDATETIME再次转换回VARCHAR

阅读所有MSDN CAST和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,你就可以来回保存很多这些转换!

您可以使用子查询,如下所示

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

这个对我有用:

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

暂无
暂无

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

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