>我有这样的数字:666/2014, 01/2014, 1/2014, 02/2014, 125/2014, 06/2014 ...等作为数据库中名为"n_inscription"的字符串。我想按顺序从数据库中检索这些字符串
我用了这个:
$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,1/2014,125/2014,第666/2014号
我正在寻找的结果是这样的:01/2014,1/2014,02/2014,06/2014,125/2014,第666/2014号
有什么建议吗?
最好的方法可能是规范化输入,以便正常排序执行您希望它执行的操作。例如,将学生编号和年份存储在两个单独的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
正确的方法是将n_inscription的类型更改为日期/日期时间/时间戳,然后默认使用顺序。
使用比较和日期计算等日期字段有更多的优势,所以我建议你这样做。
编辑:将顺序更改为school_year而不是n_inscription:
SELECT * FROM `es_student_infos`
WHERE school_year='$school_year'
ORDER school_year