![](/img/trans.png)
[英]SQL query: how to convert varchar to signed integer for SQL Server 2000?
[英]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)
现在你是你的实际转换varchar
列date
为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
更新:如果您需要其他格式,您当然可以使用具有不同样式的CONVERT
将DATETIME
再次转换回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.