Сортировать таблицу, чтобы первичный ключ начинался с буквы и получал последнюю запись - PullRequest
1 голос
/ 06 марта 2020

это моя таблица

+---------+-----------+
| Item_No | Item_name |
+---------+-----------+
|  IL1    |  abc_1    |
|  IL2    |  abc_2    |
|  IL3    |  abc_3    |
|  IL4    |  abc_4    |
|  IL5    |  abc_5    |
|  IL6    |  abc_6    |
|  IL7    |  abc_7    |
|  IL8    |  abc_8    |
|  IL9    |  abc_9    |
|  IL10   |  abc_10   |
|  IL11   |  abc_11   | 
+---------+-----------+

Я хочу отсортировать свою таблицу по первичному ключу Я пытаюсь это SQL

SELECT * 
FROM `item_master` 
WHERE Item_No LIKE 'IL%' 
ORDER by I_code DESC LIMIT 1

но я даю мне IL9 как последний

Ответы [ 2 ]

3 голосов
/ 06 марта 2020

Вы можете, например, извлечь число из "Item_No" (I_code?) И преобразовать его в int:

SELECT * 
FROM item_master 
WHERE Item_No LIKE 'IL%' 
ORDER by cast(substring(Item_No, 3) as UNSIGNED) DESC LIMIT 1
0 голосов
/ 06 марта 2020

Проблема, с которой вы здесь сталкиваетесь, заключается в неправильном упорядочении VARCHAR Я предполагаю, что это строка, и она упорядочена по лексическому принципу, вот способ ее исправить:

SELECT * 
FROM item_master 
ORDER by right(concat('0000', Item_No), 4) DESC LIMIT 1

Обратите внимание на 0000 (4 нуля) и right() второй аргумент функции 4 - длина символа для поля заказа

Другой способ решения проблемы - использовать LPAD

SELECT * 
FROM item_master 
ORDER by lpad(Item_No, 100, '0') DESC LIMIT 1

вот рабочий sqlfiddle для проверки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...