简体   繁体   中英

Increase Alphanumeric VARCHAR Entry by Value 1?

On an old project because of not thought through design I have a column which actually should be set to auto_increment, though it cannot be because it are alphanumeric entries as follows:

c01
c02
c03

(c99 would continue to c100 and more), the letter happened in the past and it would require to overhaul the system to take it out, thus I rather prefer this workaround.

Now I need a way to imitate the auto_increment functionality with the SQL statement myself, my own attempt has gotten as far as the following:

INSERT INTO tags (tag_id, tag_name, tag_description, added_by_user_id, creation_date, last_edited) VALUES (SELECT(MAX(tag_id)+1), 

'Love', 'All about love', 7, now(), 0);

This one does not work as is, though the idea was to select the highest entry in the column "tag_id" and then simply increase it by the value 1.

Any ideas how to accomplish this?

By the way I am also not sure if you simply can increase an alphanumeric entry through this way, though I know it can be done, I just don't know how.

If you want to safely get the largest integer value of a tag id of the form c##.. , you could use the following expression:

max( convert( substring(tag_id, 2) , unsigned integer) )
^^^ largest   ^^^^^^^^^ after 'c'    ^^^^^^^^^^^^^^^^ convert to positive number

Then your insert statement would look something like this:

set @newid = convert(
              (select 
               max(convert( (substring(tag_id, 2)) , unsigned integer))+1
               from tags), char(10)
            );

set @newid = if(length(@newid) = 1, concat('0', @newid), @newid);
set @newid = concat('c', @newid);

INSERT INTO tags (tag_id, tag_name, tag_description, added_by_user_id,
                  creation_date, last_edited)
VALUES (@newid, 'Love', 'All about love', 7, now(), '2012-04-15');

Demo: http://www.sqlfiddle.com/#!2/0bd9f/1

this will increase from c01 to c02 to c03 ... to c99 to c100 to c101 ... to c999 to c1000 etc.

set @nextID = (SELECT CONCAT(SUBSTRING(`tag_id`, 1, 1), IF(CHAR_LENGTH(CAST(SUBSTRING(`tag_id`, 2)
AS UNSIGNED)) < 2, LPAD(CAST(CAST(SUBSTRING(`tag_id`, 2) AS UNSIGNED) + 1 AS CHAR), 2,
'0'), CAST(CAST(SUBSTRING(`tag_id`, 2) AS UNSIGNED) + 1 AS CHAR))) FROM `tags` ORDER BY
`tag_id` DESC LIMIT 1);


INSERT INTO tags (tag_id, tag_name, tag_description, added_by_user_id,
creation_date, last_edited) VALUES (@nextID, 'Love', 'All about love', 7, NOW(), null);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM