我正在为我的女朋友业务开发一个凭证插件。 voucher-id(vid)看起来像2016-1,第一部分是当前年份,第二部分是当前的凭证ID。
我现在的问题是订购视频ASC / DESC。
现在的输出是:
- 2016-1
- 2016-10
- 2016-11
- 2016-12
- 2016-13
- 2016-2
- 2016-20
- 2016-21
- etc.
但它应该是:
- 2016-1
- 2016-2
- 2016-..
- 2016-9
- 2016-10
- 2016-11
- 2016-..
- 2016-19
- 2016-20
- 2016-21
- 2016-..
我认为由于" - "。
,铸造是不可取的希望有人能帮助我!
问候
微米。
答案 0 :(得分:3)
如果您使用此格式的所有数据(xxxx-yy
),那么您可以尝试以下order by子句:
ORDER BY SUBSTRING_INDEX(your_column,'-',1)+0,
SUBSTRING_INDEX(your_column,'-',-1)+0
<强>演示:强>
SET @str := '2016-01';
SELECT
SUBSTRING_INDEX(@str,'-',1)+0 AS firstPart,
SUBSTRING_INDEX(@str,'-',-1)+0 AS secondPart;
输出
firstPart secondPart
2016 1
注意:强>
第一个substring_index
函数抓取连字符前的文本,第二个substring_index
函数抓取连字符后的文本。
稍后向其添加0会将其转换为数字。
更多:您也可以使用CAST
功能,如下所示:
ORDER BY
CAST(SUBSTRING_INDEX(your_column,'-',1)) AS UNSIGNED) ,
CAST(SUBSTRING_INDEX(your_column,'-',-1)) AS UNSIGNED)
答案 1 :(得分:1)
你应该像voucherid - year
那样反过来。然后订购将有效。
或者,如果你想保持不变,试试这样的事情
ORDER BY
CAST(SUBSTRING(voucher, 5) AS INT) DESC
其中1,5是“2016-”所以它按照之后的任何顺序命令:凭证ID。