2017-04-24 47 views
-1

我该如何asc date? 我在SQL如何ASC DESC日期哪个数据类型是varchar

 
2014-3-18 
2014-1-15 
2014-3-20 
2015-3-18 

的folllowing我试过FF代码,但它只是给我的错误在我的分贝。 是的,列的数据类型是varchar。 而且该列中还有NULL值。

 
SELECT * 
FROM `locate` 
ORDER BY 
    CONVERT(DateTime, `Date`,101) DESC 

请帮忙。谢谢! :)

+0

您使用哪个DBMS? – Jens

+0

如果出现错误,还要添加错误消息 – Jens

+0

您的SQL语法错误;检查与您的MariaDB服务器版本相对应的手册,以找到在'Date'附近使用的正确语法,101)DESC LIMIT 0,25'在第4行 – MonPadi

回答

1

看起来像你使用mysql所以你不能使用mssqlconvert函数。你必须使用STR_TO_DATE

SELECT * 
FROM `locate` 
ORDER BY 
    STR_TO_DATE(`Date`,'%Y-%m-%d') DESC 

欲了解更多信息,请参阅documentation

+0

谢谢!我需要一些mssql和mysql之间的基础知识。 – MonPadi

0

通过这种方式使用顺序:

SELECT DATE_FORMAT(`date`, '%d-%m-%Y') as date_formatted 
FROM locate 
ORDER BY `datetime` DESC 

请让我知道,如果它的工作原理。

+0

它会在MySQL上工作吗? - )) – marmeladze

+0

让我们听听作者是否有效。如果不是,我们可以找到替代方案。 –

+0

ofcourse does not work - ))因为他/她使用xampp - 这是一个apache,mysql,php/perl/python包。 – marmeladze

0

我猜EVENTDATE是CHAR或VARCHAR,而不是一个日期,否则您的ORDER BY子句将被罚款。

您可以使用转换为数值更改为日期和排序由

SELECT * 
FROM 
    vw_view 
ORDER BY 
    CONVERT(DateTime, EventDate,101) DESC 

与问题是,作为斯帕克指出,在评论中,如果有EVENTDATE不能是一个值转换为查询不会执行的日期。

这意味着您应该排除坏的行或让坏行转到结果的底部

要排除的不良行只加WHERE则IsDate(EVENTDATE)= 1

要让不好的日期去你需要使用的底部CASE

eg

ORDER BY 
    CASE 
     WHEN IsDate(EventDate) = 1 THEN CONVERT(DateTime, EventDate,101) 
     ELSE null 
    END DESC 
相关问题