我正在为我的女朋友们开发一个代金券插件。凭证id (vid)看起来像2016-1,第一部分是本年度,第二部分是当前凭证id。
我现在的问题是订购vids / 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-..我认为选角是没有选择的,因为"-“。
希望有人能帮我!
问候
M.
发布于 2016-09-17 09:24:49
如果您的所有数据都是这种格式(xxxx-yy),那么您可以尝试以下order子句:
ORDER BY SUBSTRING_INDEX(your_column,'-',1)+0,
SUBSTRING_INDEX(your_column,'-',-1)+0Demonstration:
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添加到它中,将其转换为一个数字。
More:,您也可以使用CAST函数,如下所示:
ORDER BY
CAST(SUBSTRING_INDEX(your_column,'-',1)) AS UNSIGNED) ,
CAST(SUBSTRING_INDEX(your_column,'-',-1)) AS UNSIGNED) 发布于 2016-09-17 09:24:37
你应该像voucherid - year那样以相反的方式去做。那么订单就能工作了。
或者,如果你想保持原样,就试试这样的方法
ORDER BY
CAST(SUBSTRING(voucher, 5) AS INT) DESC其中1,5是"2016-“,所以它的订单,无论是什么后:凭单身份证。
https://stackoverflow.com/questions/39545104
复制相似问题