如何将 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
如何转换列以使排序语句正常工作?
使用Cast
或Convert
函数将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。
假设它都可以安全地转换为日期或日期时间:
CAST(CD AS DATE)
否则,您必须拆分字符串并手动将其设置为日期。
尝试:
SELECT *
FROM [Db].[dbo].[Table1]
ORDER BY CONVERT(DATETIME,[CD],105) ASC
我有一个 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
如何转换列以使排序语句正常工作?
使用Cast
或Convert
函数将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。
假设它都可以安全地转换为日期或日期时间:
CAST(CD AS DATE)
否则,您必须拆分字符串并手动将其设置为日期。
尝试:
SELECT *
FROM [Db].[dbo].[Table1]
ORDER BY CONVERT(DATETIME,[CD],105) ASC