MySQL возвращает новый порядковый номер заказа в формате MMDDYY- # - PullRequest
0 голосов
/ 30 сентября 2009

У меня есть следующий запрос для генерации новых номеров заказов в формате MMDDYY- #, где номер является следующим в последовательности для сегодняшних заказов.

select concat(date_format(now(),'%m%d%y'),'-',ifNULL(max(right(po_number, LENGTH(po_number)-7)),0)+1) newPO 
from orders where left(po_number, 6) = date_format(now(),'%m%d%y')

Это хорошо работает для заказов 1-9, но когда я доберусь до 10, я буду продолжать захватывать 9-е в качестве максимума и никогда не смогу генерировать MMDDYY-11 в качестве номера заказа. Мне нужно переосмыслить этот запрос, но я застрял на наиболее эффективный способ сделать это. У кого-нибудь есть элегантное решение? Вот пример структуры таблицы для тестирования.

CREATE TABLE orders (
po_number VARCHAR( 10 ) NOT NULL
) ENGINE = MYISAM ;

INSERT INTO orders (po_number)
VALUES ('093009-9'), ('093009-10');

Спасибо!

1 Ответ

0 голосов
/ 30 сентября 2009

ваше выражение разделяет число в конце, а затем вычисляет max () на основе того факта, что это текст. если вы хотите отсортировать по числовому значению, вы должны сначала привести его к числу.

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