我有这样的数字:666 / 2014,01 / 2014,1 / 2014,20 / 2014,125 / 2014,06 / 2014 ......等等,因为STRING命名为' n_inscription'在数据库中。 我想在数据库的ORDER中检索这些字符串
我用过这个:
$sql_students = $bd->query("SELECT * FROM `es_student_infos`
WHERE school_year='$school_year'
ORDER BY right(n_inscription, 4) * 1,
substring_index(n_inscription, '/', 1) * 1");
我得到的结果如下: 01/2014, 02/2014, 06/2014, 二千〇一十四分之一, 二千〇一十四分之一百二十五, 二千〇一十四分之六百六十六
我想找的结果是这样的: 01/2014, 二千〇一十四分之一, 02/2014, 06/2014, 二千〇一十四分之一百二十五, 二千〇一十四分之六百六十六
有什么建议吗?
答案 0 :(得分:2)
正确的方法是将n_inscription的类型更改为date / datetime / timestamp,然后默认使用order。
使用比较和日期计算等日期字段有更多优点,所以我建议你这样做。
编辑:将照片更改为school_year而不是n_inscription:
SELECT * FROM `es_student_infos`
WHERE school_year='$school_year'
ORDER school_year
答案 1 :(得分:2)
最好的方法可能是对输入进行标准化,以便正常排序能够完成您想要的操作。例如,将学生编号和年份存储在两个单独的INTEGER
列中,然后存储在ORDER BY studentNumber ASC, inscriptionYear ASC
中。
如果这绝对不可能:
SELECT
*
FROM
es_student_infos
ORDER BY
CAST(RIGHT(n_inscription, 4) AS UNSIGNED) ASC,
CAST(LEFT(n_inscription, LOCATE('/', n_inscription) - 1) AS UNSIGNED) ASC
链接到演示解决方案的小提琴:http://sqlfiddle.com/#!2/a5538/1/0