如何在mysql中对自定义日期进行排序?

时间:2015-01-30 14:07:19

标签: mysql

我有一个名为date的专栏,其中有一个纪念罗马尼亚约会系统。例如:2013年12月12日,意味着2013年12月12日,或2014年11月2014年意味着2014年4月11日。

这种方式排序不正确:

SELECT `date` FROM articles ORDER BY DATE(`date`) ASC

我问你是否有办法在日期之后对我的专栏进行排序?我的想法是以某种方式将我的日期系统在通用系统之后转换为对它进行排序。但我不知道怎么办? 的更新 几个月

ianuarie  => january
februarie => february
martie    => march
aprilie   => april
mai       => may
iunie     => june
iulie     => july
august    => august
septembrie => september
octombrie  => octomber
noiembrie  => november
decembrie  => december

更新。 Thx to exussum这是解决方案:

SELECT * FROM articles ORDER BY STR_TO_DATE
(
REPLACE(
    REPLACE(
        REPLACE(
            REPLACE(
                REPLACE(
                    REPLACE(
                        REPLACE(
                            REPLACE(
                                REPLACE(
                                    REPLACE(
                                        REPLACE(
                                            REPLACE(`date`,'ianuarie','january'),
                                        'februarie', 'february'),
                                    'martie', 'march'),
                                'aprilie','april'),
                            'mai','may'),
                        'iunie','june'),
                    'iulie','july'),
                'august','august'),
            'septembrie','september'),
        'octombrie','october'),
    'noiembrie','november'),
'decembrie','december')
,'%d %M %Y') DESC ;

3 个答案:

答案 0 :(得分:1)

它会变慢,但你可以使用str_replace和str_to_date的组合

http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_str-to-date http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_replace

如果您的服务器设置正确,也可能会有所帮助,因为您可能忘记更换月份名称

http://dev.mysql.com/doc/refman/5.0/en/locale-support.html

例如

ORDER BY STR_TO_DATE(`date`,'%d %M %Y');

ORDER BY STR_TO_DATE(
REPLACE(REPLACE(REPLACE(`date`,'ianuarie','january'),'februarie', 'february'),'martie', 'march')    ,'%d %M %Y');

您需要12次替换才能使其正常工作,切换区域设置并使用以前的代码可能更容易

您应该能够按会话进行

http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_lc_time_names

答案 1 :(得分:0)

使用MySql用户定义函数并将其应用于日期字段。 您还可以使用详细的CASE语句,但从清洁代码的角度来看,这可能不是最佳选择。

答案 2 :(得分:0)

最快的方法是使用正确的月份而不是罗马尼亚标签; ianuarie - > 1 ... decembeie - > 12.这样你可能不需要格式化程序,并且可以用任何语言理解。

相关问题