Jump to content
nyac55

MYSQL tworzenie zmiennej łańcuchowej; doklejanie kolejnych znaków do zmiennej - jak to wykonać?

Recommended Posts

Witam wszystkich. Jak w temacie mama problem z językiem MYSQL, a mianowicie chciałbym utworzyć zmienną łańcuchową, przechowującą takie znaki np. 89KL-OP12O-GT8912L, czyli 4 znaki myślnik, 5 znaków, myślnik, 7 znaków...

Zamieszczę tutaj fragment kodu, który stworzyłem i opiszę dokładnie o co chodzi:


BEGIN

Set @sign= 'ABCDEFGHIJKLMNOUPRSTVWQXYZ1234567890';
Set @sign1= 'ABCDEFGHIJKLMNOUPRSTVWQXYZ';
Set @sign2= '1234567890';

Set @a = 1;
Set @z = 36;
Set @a1 = 1;
Set @z1 = 26;
Set @a2 = 1;
Set @z2 = 10;

Set @c1 = 1;
Set @c2 = 3;
#Set @znak ='';

set @text = '';
SELECT @text;
# kore

Set @c = (SELECT FLOOR(@c1 + (RAND() * (@c2 - @c1 + 1))));
SELECT @c;

Set @x1 = (SELECT FLOOR(@a1 + (RAND() * (@z1 - @a1 + 1))));
Set @x2 = (SELECT FLOOR(@a2 + (RAND() * (@z2 - @a2 + 1))));
Set @x = (SELECT FLOOR(@a + (RAND() * (@z - @a + 1))));

SELECT @x1;
SELECT @x2;
SELECT @x;

# --------------------------------
# IF wybór alfabetu
IF @c=1 THEN
Set @znak=@znak + SUBSTRING(@sign1,@x1,1);
SELECT SUBSTRING(@sign1,@x1,1);
SELECT @znak;

ELSEIF @c=2 THEN
Set @znak=@znak + SUBSTRING(@sign2,@x2,1);
SELECT SUBSTRING(@sign2,@x2,1);
SELECT @znak;

ELSEIF @c=3 THEN
Set @znak=@znak + SUBSTRING(@sign,@x,1);
SELECT SUBSTRING(@sign,@x,1);
SELECT @znak;

ELSE
SELECT 'blad';
END IF;

SELECT @text;

#ELSEIF @c=2 THEN
#SELECT SUBSTRING(@sign2,@x2,1);
#Set @znak=@znak + SUBSTRING(@sign2,@x2,1);
#SELECT @znak;

#ELSEIF @c=3 THEN
#SELECT SUBSTRING(@sign,@x,1);
#Set @znak=@znak + SUBSTRING(@sign,@x,1);
#SELECT @znak;

#END IF;
# --------------------------------
# LOOP na 4 wywołania 2 koniec

#ELSE
#SELECT @b;
#LEAVE ciag_1_loop;
#END IF;

#END LOOP ciag_1_loop;
END

Ten fragment kodu, to procedura, która będzie wywoływana z zewnątrz przez inną procedurę.

Chodzi o to, że mamy trzy łańcuchy znaków (tekst), każdy ma inną długość, a zatem funkcją rand losujemy, jakiś znak dla każdego z nich. Losujemy także cyfrę 1-3, aby wprowadzić losowość albo cyfra albo litera na danym polu. Następnie próbowałem zrobić pętlę, która robi następującą rzecz:

mając wylosowaną cyfrę, bądź literę podstawia ją pod zmienną i dokleją kolejną wylosowaną i tak 4 razy. Gdyby to się udało można by było zrobić to samo dla 2 i 3 ciągu i zapisać to wszystko pod 1 zmienną oddzieloną - (myślnikami) lub od razu mając 1 ciąg dokleić myślnik i doklejać kolejne ciągi.

Dodatkowo problem jest gdy 1 znak to cyfra, wtedy nie mogę dokleić litery i na odwrót gdy 1 znak to litera nie mogę dokleić cyfry do zmiennej.

Edited by nyac55
Link to comment
Share on other sites

EDIT: Już sobie poradziłem. Pojedyncze znaki można losować np. przy użyciu funkcji RAND, następnie IFami zaprogramować, aby zmienna zwracała kod ASCII danego znaku. Mając to wystarczy znaki łączyć (1 po 2)* -(to nie takie proste, mimo wszystko dla początkujących użytkowników) i wyświetlać przy użyciu funkcji


SELECT CHAR();

np.


SET @text=(SELECT CHAR(@gog1,@gog2,@gog3,@gog4,@gog5,@gog6,@gog7));

Z tym, że ja dla każdego obiegu umieszczałem zmienne po inną zmienną @gog, np. dla 1 obiegu było to @gog1, dla 2 @gog2 itd.

W ten sposób możemy losować kolejne znaki i wyświetlać pod 1 zmienną.

Proszę o zamknięcie tematu :)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...