سؤال

أريد إدراج قيم متعددة في جدول حيث تزداد القيمة الموجودة في أحد الأعمدة بشكل تسلسلي.ومع ذلك، فإن التسلسل معقد بعض الشيء بسبب متطلبات العمل.

سيكون الإدخال الفردي شيئًا مثل هذا:

INSERT INTO blah (col1, col2) VALUES ('SU0001', 'myemail');

الآن، col1 هي القيمة التي تحتاج إلى الزيادة، مع الحفاظ على بنية الطول الثابت.لذا فإن الإدخال التالي يجب أن يكون هكذا:

INSERT INTO blah (col1, col2) VALUES ('SU0002', 'myemail');

وما إلى ذلك وهلم جرا..حتى:

INSERT INTO blah (col1, col2) VALUES ('SU1600', 'myemail');

كيف يمكنني القيام بذلك باستخدام SQL فقط.يمكنني القيام بذلك بسهولة في Java وRuby، لكنني عالق في هذا وقد جربت عدة أشياء، ولكن يبدو أن معظمها لا يحتفظ ببنية الطول الثابت (تصبح SU1، SU2، بدلاً من SU0001، SU0002).

شكرا على كل المساعدة!

فيكرام

هل كانت مفيدة؟

المحلول

نظرًا لأنك حصلت بالفعل على الزيادة، يبدو أن كل ما تفتقده هو LPAD.

LPAD(@i, 4, '0')

سيضيف تكرار "0" إلى يسار @i بحيث تكون السلسلة الناتجة بعرض 4 أحرف على الأقل.

يمكنك حتى وضع منطق الزيادة في ملف مشغل.

delimiter //
CREATE TRIGGER incr_col1 BEFORE INSERT ON blah
FOR EACH ROW BEGIN
  SET @prev=(SELECT COALESCE(MAX(col1), 0) FROM blah);
  SET NEW.col1 = CONCAT('SU', LPAD(1+SUBSTR(@prev, 3), 4, '0'));
END //
delimiter ;

نصائح أخرى

إنشاء جدول مؤقت مع 0-9

بعد إنشاء استعلام ينضم إلى هذا الجدول ذاتيًا بقدر ما يلزم من المرات (2 - لـ 00 - 99، إلخ)

بعد ذلك قم بإدخال ...اختر من الاستعلام الفرعي

;-)

وLPAD() للأصفار البادئة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top