如何将 varchar 转换为日期以便在 SQL 服务器中订购

How to convert varchar to date for ordering in SQL Server

我有一个 table,它有一个类型为 varchar(100) 的列 CreatedDate。该列的行是:

CreatedDate
--------------
March 6, 2015
March 6, 2015
March 6, 2015
March 6, 2015
March 6, 2015
March 6, 2015
March 7, 2015
March 10, 2015

如果我执行以下查询,日期排序不正确:

SELECT * 
FROM [Db].[dbo].[Table1] 
ORDER BY [CD] ASC

我看到以下内容:

CreatedDate
---------------
March 10, 2015
March 6, 2015
March 6, 2015
March 6, 2015
March 6, 2015
March 6, 2015
March 6, 2015
March 7, 2015

如何转换列以使排序语句正常工作?

使用CastConvert函数将varchar数据转换为Date然后在order by

中使用
SELECT *
FROM   [Db].[dbo].[Table1]
ORDER  BY Cast([CD] AS DATE) ASC 

如果使用得当datatype(date)这样的问题是可以避免的

ORDER BY 子句更改为:

ORDER BY TRY_PARSE(CreatedDate AS DATE) ASC;

如果 CreatedDate 列包含不是有效日期的值,TRY_PARSE returns NULL 用于排序评估而不是抛出错误消息。

如果您可以控制 table 定义,请将列数据类型更改为 DATE。您不必为了排序而跳来跳去,无效的日期范围将在插入时被阻止,并且需要更少的 space。

SQLFiddle

假设它都可以安全地转换为日期或日期时间:

CAST(CD AS DATE)

否则,您必须拆分字符串并手动将其设置为日期。

尝试:

SELECT *
FROM   [Db].[dbo].[Table1]
ORDER  BY CONVERT(DATETIME,[CD],105) ASC