Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

nyac55

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

Polecane posty

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.

Link do komentarza
Udostępnij na innych stronach

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 do komentarza
Udostępnij na innych stronach



  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...