MySQL автоинкремент плюс алфавитно-цифровые символы в одном столбце

0

Я новичок в MySQL, исходящей из Oracle. У меня есть требование создать таблицу с первичным ключом в одном столбце, но со следующим форматом.

X-A письмо с указанием страны происхождения, например. S для Испании, Z для Зимбабве e.tc(у нас есть только пять стран происхождения)

YYYYMMDD - Дата в этом формате,
9999 - 4-значный офисный код.
9999999 - 7 правых заполненных порядковых номеров из последовательности в Oracle (автоматическое добавление в MySQL)
Это дает мне первичный ключ, например Z2010013150110000001 в качестве первичного ключа.

Мой вопрос заключается в том, как я могу сгенерировать часть 9999999 в MySQL. В Oracle это было бы

select 'Z'||to_char(sysdate, 'YYYYMMDD')|| 5011||cust_id.nextval from dual;
  • 2
    Кто-то не понимает нормализации ...
Теги:

1 ответ

3
Лучший ответ

auto_increment не может быть просто частью поля, поэтому одним столбцом может быть стирка. Итак, как насчет:

CREATE TABLE xxxxx (
id int unsigned not null auto_increment,
rest_of_that_key char(xx) not null,
// other goodies
PRIMARY KEY (id)
);

Тогда вы можете SELECT CONCAT(rest_of_that_key, LPAD(id, 7, '0')) AS full_key FROM xxxxx.


Или даже лучше, поэтому вы можете использовать эти служебные коды и даты для фильтрации данных с помощью:

CREATE TABLE xxxxx (
id int unsigned not null auto_increment,
country_code char(1) not null,
sysdate date not null,
office_code smallint unsigned not null,
// other goodies
PRIMARY KEY (id),
KEY country_code (country_code)
// etc, index the useful stuff
);

Затем вы можете использовать SELECT CONCAT(country_code, DATE_FORMAT(sysdate, '%Y%m%d'), office_code, LPAD(id, 7, '0')) AS full_key FROM xxxxx и даже выбросить WHERE office_code = 1256 AND sysdate >= '2010-01-01', не имея необходимости каким-либо образом разобрать эту огромную строку.

Если вам действительно нужна эта огромная строка в качестве первичного ключа с одним полем, вы сами будете вручную наращивать все. Я по-прежнему не рекомендую делать это, хотя MySQL действительно любит, чтобы его PK были числовыми.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню