Sql server 如何在sql server中设置按日期排序列

Sql server 如何在sql server中设置按日期排序列,sql-server,Sql Server,我有一个DB格式的表和如下列 01-03-2013 01-04-2013 02-03-2013 我想通过类似的方式显示秩序 01-03-2013 02-03-2013 01-04-2013 请帮帮我。很可能您的列没有存储为日期数据类型之一,这是根据ASCII码作为字符串排序的 您可以强制转换列以进行排序 SELECT * FROM tbl ORDER BY CONVERT(datetime, userColumn, 106) 否则就直截了当了 SELECT * FROM tbl ORDE

我有一个DB格式的表和如下列

01-03-2013
01-04-2013
02-03-2013
我想通过类似的方式显示秩序

01-03-2013
02-03-2013
01-04-2013

请帮帮我。

很可能您的列没有存储为日期数据类型之一,这是根据ASCII码作为字符串排序的

您可以强制转换列以进行排序

SELECT * FROM tbl 
ORDER BY CONVERT(datetime, userColumn, 106)
否则就直截了当了

SELECT * FROM tbl
ORDER BY userColumn
如果列中也包含无效记录,则可以使用这些记录的默认日期

SELECT * FROM tbl 
ORDER BY CONVERT(datetime, 
                 CASE ISDATE(userColumn) 
                     WHEN 1 THEN userColumn 
                     ELSE '01-01-1900' 
                 END, 106)

如果您使用适当的数据类型(
datetime
datetime2
date
datetimeoffset
)将这些日期存储在列中,则应使用
ORDER by
自然排序。“那有什么问题吗?我想这些都是列名,@Damien_the”_Unbeliever@Raj:基于问题的好捕获。但看看OP引用的例子,他使用了一个月的不同日期——见三月到四月。所以我怀疑你所说的是场景。日期格式是不明确的,所以如果需要转换,应该使用
CONVERT
而不是
CAST
,并提供正确的参数。@Damien\u不信者:感谢添加信息:)这里的正确样式应该是106-您正在指定字符串的外观,不是您要转换为的“格式”。字符串看起来像是
dd-mm-yyyy
,这是样式106。@Damien\u The\u-uncerver:112是我要转换为的yyyyMMdd格式。MSDN上的style第三个参数表示
style是一个整数表达式,用于指定转换函数如何转换表达式。如果我解释错了,请纠正我。不,您正在转换为
datetime
。这些东西没有格式。我之所以说使用
CONVERT
,是因为
dd-mm-yyyy
(这是当前的文本)不明确,可能被解释为
mm-dd-yyyy
)。您提供了style参数来告诉SQLServer如何解释字符串。