Triger a losowy ciag znakow
Adam Wolny - 12-11-2006 01:32
Triger a losowy ciag znakow
Witam Mam w tabeli pole "znak" typu VARCHAR(20) Wstawiam cos do tej tabeli i chcialbym:
- jezeli przy wstawianiu w pole "znak" wartosc <> NULL to normalnie wstawia to co chcemy tam wstawic
- jezeli przy wstawianiu w pole "znak" wartosc = NULL to wstawia losowy ciag znakow(dlugosci 20 znakow) skladajacy sie ze wszystkich liter i wszystkich cyfr ale jako pierwsza litera tego ciagu ma byc zawsze X czyli np:
Xygawdnoiq23h7acnu8a
Jak to zrealizowac ?
Pozdrawiam
Michał Kuratczyk - 12-11-2006 01:32
Adam Wolny wrote: > - jezeli przy wstawianiu w pole "znak" wartosc = NULL to wstawia losowy > ciag znakow(dlugosci 20 znakow) skladajacy sie ze wszystkich liter i > wszystkich cyfr ale jako pierwsza litera tego ciagu ma byc zawsze X > czyli np: > > Xygawdnoiq23h7acnu8a > > Jak to zrealizowac ? Nie podałeś jaka to baza ani z czym właściwie masz problem. Zakładając, że z generowaniem stringów, to w Oracle masz do tego funkcję:
SQL> select 'X' || dbms_random.string('x', 19) from dual;
'X'||DBMS_RANDOM.STRING('X',19) ----------------------------------- XQ8TWNL9DYQ9PMBTQFCH
Uwagi:
1) 'x' w wywołaniu funkcji nie ma nic wspólnego z X-em na początku. Jest to po prostu argument mówiący o formacie stringa, który ma być wygenerowany i oznacza "duże litery i cyfry".
2) to, że string jest losowy, to nie znaczy, że nigdy nie wylosuje się dwa razy ten sam, więc jeśli chcesz, żeby to był unikalny identyfikator, to musisz obsłużyć sytuację, gdy wystąpi wyjątek (generujesz kolejny string i próbujesz znowu).
3) nie prościej skorzystać z sekwencji / autoincrement? Potrzebne Ci te litery do czegoś?
-- Michał Kuratczyk
Maciej Łuszczyński - 12-11-2006 01:32
> - jezeli przy wstawianiu w pole "znak" wartosc = NULL to wstawia losowy ciag > znakow(dlugosci 20 znakow) skladajacy sie ze wszystkich liter i wszystkich > cyfr ale jako pierwsza litera tego ciagu ma byc zawsze X > czyli np: > > Xygawdnoiq23h7acnu8a > > Jak to zrealizowac ? Witam.
Proponuje funkcje RAND().
Dla leniwych rozwiazanie ponizej:
DECLARE @Slownik varchar(100) DECLARE @Wynik varchar(20) DECLARE @i int
SET @Slownik = 'abcdefghijklmnopqrstuwxyz1234567890' SET @i = 1 SET @Wynik = 'X'
WHILE @i < 20 BEGIN SET @Wynik = @Wynik + SUBSTRING(@Slownik, CONVERT(int, 1 + RAND() * (LEN(@Slownik) - 1)), 1) SET @i = @i + 1 END
SELECT @Wynik
Pozdrawiam Macko -- *** A czym się różni Cray od normalnego peceta? *** Tym, że Cray wykonuje pętle nieskończone w 10 sekund.
Adam Wolny - 12-11-2006 01:32
baza to PostgreSQL
Adam Wolny - 12-11-2006 01:32
A czy w PostgreSQL da sie zalozyc unikalny kucz na pole tekstowe varchar(20) ale tak zeby to dzialalo ze puste(NULL) takie pola moga byc tylko zeby nie mozna bylo wpisac tego samego tekstu.
tzn w bazie moglby by byc wiersze:
NULL NULL NULL NULL aseufdrtjudesfhvtfde yhdrftgwqaloiwdstrwa
ale niedpopuszczalne by bylo:
aseufdrtjudesfhvtfde aseufdrtjudesfhvtfde yhdrftgwqaloiwdstrwa
Sławomir Szyszło - 12-11-2006 01:32
Dnia Fri, 29 Sep 2006 17:51:23 +0200, "Adam Wolny" <adamwolny@wp.pl> wklepał(-a):
>A czy w PostgreSQL da sie zalozyc unikalny kucz na pole tekstowe varchar(20) >ale tak zeby to dzialalo ze puste(NULL) takie pola moga byc tylko zeby nie >mozna bylo wpisac tego samego tekstu.
A od kiedy to NULL jest uwzględniany w kluczu unikalnym? http://www.postgresql.org/docs/8.1/s...s.html#AEN2016
Załóż constraint unique i po sprawie. -- Sławomir Szyszło mailto:slaszysz@poczta.onet.pl Primus inter FAQires & Grand Inquisitor no.0 of pl.comp.bazy-danych FAQ pl.comp.bazy-danych http://www.dbf.pl/faq/ Archiwum http://groups.google.com/groups?grou...mp.bazy-danych
Wojtek pBT - 12-11-2006 01:32
Dnia 29-09-2006 o 17:51:23 Adam Wolny <adamwolny@wp.pl> napisał(a):
> A czy w PostgreSQL da sie zalozyc unikalny kucz na pole tekstowe > varchar(20) > ale tak zeby to dzialalo ze puste(NULL) takie pola moga byc tylko zeby > nie > mozna bylo wpisac tego samego tekstu.
WG specyfikacji SQL
NULL != NULL
A czy postgres powoli założyć index UNIQUE, to sobie sprawdz
pBT
-- Używam klienta poczty Opera Mail: http://www.opera.com/mail/
Adam Wolny - 12-11-2006 01:32
> A od kiedy to NULL jest uwzględniany w kluczu unikalnym? > http://www.postgresql.org/docs/8.1/s...s.html#AEN2016 > > Załóż constraint unique i po sprawie.
dzieki wielki zabieram sie za czytanie :)
Paweł Matejski - 12-11-2006 01:33
Wojtek pBT wrote: > > WG specyfikacji SQL > > NULL != NULL
To nie jest prawda! ;)
-- P.M.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Konwesja znaków w dump'ie bazy danych - ISO -> utf-8 -> ISO -> utf-8
[MySQL] - konwersja polskich znaków i jeszcze małe "conieco"
MySQL 4.1.21, problem z porządkowaniem polskich znaków diakrytycznych
[mysql/linux] problem z kodowaniem polskich znakow
Jak sprawdzić kodowanie znaków bazy MS SQL ?
jak wymusic sortowanie mysql dla znakow kodowanych w cp1250
Uzywanie polskich znakow w bazie danych MYSQL
Pytanie SQL spacja przed i za ciagiem znakow
mysqldump i kodowanie utf-8 (brak polskich znakow)
PHP działający samoczynnie
zanotowane.pldoc.pisz.plpdf.pisz.plptsite.xlx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|