SQL ORDER BY日期问题

dny*_*war 41 sql date sql-order-by

能帮我解决这个问题吗?我试图按日期排序SQL查询的结果,但我没有得到我需要的结果.

我正在使用的查询是:

SELECT date FROM tbemp ORDER BY date ASC
Run Code Online (Sandbox Code Playgroud)

结果是:

01/02/2009
03/01/2009
04/06/2009
05/03/2009
06/12/2008
07/02/2009
Run Code Online (Sandbox Code Playgroud)

结果应该是:

06/12/2008
03/01/2009
01/02/2009
07/02/2009
Run Code Online (Sandbox Code Playgroud)

我需要以上面的格式选择日期.

非常感谢您的帮助.

man*_*nji 42

您的日期列似乎不是datetime类型,而是varchar.您必须在排序时将其转换为日期时间:

select date
from tbemp
order by convert(datetime, date, 103) ASC
Run Code Online (Sandbox Code Playgroud)

style 103 = dd/MM/yyyy (msdn)

  • 如果当前语言和日期格式设置导致将aa/bb/cccc解释为月/日/年,则无法正确排序,就像大多数美国SQL Server安装的情况一样.(我假设使用CONVERT这是T-SQL,因此您可以将样式103指定为CONVERT的可选第三个参数并覆盖任何语言或日期格式上下文.) (2认同)

Jon*_*eet 16

听起来我的列不是日期列,而是文本列(varchar/nvarchar等).您应该将其作为日期而不是字符串存储在数据库中.

如果由于某种原因必须将其存储为字符串,请将其存储为可排序的格式,例如yyyy/MM/dd.

正如najmeddine所示,您可以在每次访问时转换列,但我会尽力不这样做.这将使数据库做了很多更多的工作-它不会能够保持适当的索引等.只要有可能,将数据存储在适当的数据本身就是一种类型.

  • @dusoft:你使用什么分隔符并不重要,只要它具有正确的重要性. (3认同)

Mic*_*l A 12

不确定你正在使用什么dbms但是我在Microsoft SQL中这样做:

select      [date]
from        tbemp 
order by    cast([date] as datetime) asc
Run Code Online (Sandbox Code Playgroud)


ghi*_*boz 6

这对我有用:

SELECT datefield FROM myTable ORDER BY CONVERT(DATE, datefield) ASC