Chciałbym wiedzieć, czy istnieje sposób na wybranie losowo wygenerowanej liczby od 100 do 500 wraz z zapytaniem wybierającym.
Na przykład: SELECT name, address, random_number FROM users
Nie muszę przechowywać tego numeru w db i używać go tylko do wyświetlania.
Próbowałem czegoś takiego, ale to nie działa.
SELECT name, address, FLOOR(RAND() * 500) AS random_number FROM users
Mam nadzieję, że ktoś mi pomoże. Dziękuję Ci
Odpowiedzi:
To powinno dać to, czego chcesz:
Generalnie
FLOOR(RAND() * (<max> - <min> + 1)) + <min>
generuje liczbę od<min
> do<max>
włącznie.Aktualizacja
To pełne stwierdzenie powinno działać:
źródło
round()
da niejednorodną dystrybucję.SET @r=FLOOR(RAND() * 401) + 100
, więcSELECT @r
.RAND()
,UUID()
,NOW()
Są funkcjami indeterministyczną. Należy unikać zapisywania wywołań takich funkcji w dzienniku bin w celu replikacji. Na przykład.INSERT INTO t SET ID=UUID();
spowoduje, że wartościID
pól będą różne na urządzeniach nadrzędnych i podrzędnych. Zamiast tego należy go zapisać jakoSET @uuid:=UUID();
, aINSERT INTO t SET ID=@uuid;
następnie uruchomić je w jednej transakcji. To będzie bezpieczne dla replikacji. To jest trochę nie na temat tego pytania. Nie oznacza to, że twoja odpowiedź ma jakiś problem. :)Ponieważ
RAND
daje liczbę 0 <= v <1,0 (patrz dokumentacja ), której należy użyć,ROUND
aby upewnić się, że można uzyskać górną granicę (w tym przypadku 500) i dolną granicę (w tym przypadku 100)Aby wyprodukować asortyment, którego potrzebujesz:
źródło
Oprócz tej odpowiedzi utwórz funkcję taką jak
i zadzwoń jak
SELECT myrandom(100,300);
Daje to losową liczbę od 100 do 300
źródło
Możesz utworzyć liczbę losową za pomocą
FLOOR(RAND() * n) as randnum
(n jest liczbą całkowitą), jednak jeśli nie potrzebujesz powtarzać tej samej liczby losowej, będziesz musiał trochę przechowywać w tabeli tymczasowej. Więc możesz to sprawdzić za pomocąwhere randnum not in (select * from temptable)
...źródło
te oba działają ładnie:
źródło
Ta formuła jest poprawna znaleźć liczby całkowite od
i
celuj
, gdziei <= R <= j
źródło
FLOOR(min+RAND()*(max-min+1))