Czy w Microsoft SQL Server można wygenerować losową wartość int od Min do Max (przykład 3-9, 15-99 itd.)
Wiem, mogę wygenerować od 0 do Max, ale jak zwiększyć granicę Min?
To zapytanie generuje losową wartość od 1 do 6. Należy ją zmienić z 3 na 6.
SELECT table_name, 1.0 + floor(6 * RAND(convert(varbinary, newid()))) magic_number
FROM information_schema.tables
Dodano 5 sekund później :
Głupie pytanie, przepraszam ...
SELECT table_name, 3.0 + floor(4 * RAND(convert(varbinary, newid()))) magic_number
FROM information_schema.tables
sql
sql-server
sql-server-2008
FSou1
źródło
źródło
Odpowiedzi:
To generuje losową liczbę z przedziału od 0 do 9
Od 1 do 6
Od 3 do 6
Dynamiczny (na podstawie komentarza Eilerta Hjelmesethsa)
Zaktualizowano na podstawie komentarzy:
NEWID
generuje losowy ciąg (dla każdego zwracanego wiersza)CHECKSUM
przyjmuje wartość łańcucha i tworzy liczbę%
) dzieli przez tę liczbę i zwraca resztę (co oznacza, że maksymalna wartość jest o jeden mniejsza niż liczba, której używasz)ABS
zmienia negatywne wyniki na pozytywneźródło
ABS(CHECKSUM(NEWID()) % (@max - @min + 1)) + @min
. Kilka testów z mojej strony dało dobre wyniki. Jeśli rzeczywiście jest dokładna, myślę, że tę odpowiedź można by nieco poprawić, włączając ją.Widzę, że dodałeś odpowiedź na swoje pytanie w SQL Server 2008, którą możesz również zrobić
Jest kilka wad tej metody
NEWID()
metodaale pomyślałem, że dodam to jako inną opcję.
źródło
CRYPT_GEN_RANDOM
jest naprawdę przeznaczony do sytuacji, w których potrzebujesz bardziej bezpiecznej kryptograficznie liczby pseudolosowej.Możesz to zrobić:
I to zostało wzięte bezpośrednio z tego linku , naprawdę nie wiem, jak należycie przypisać tę odpowiedź.
źródło
Ładnie i prosto, ze strony Pinal Dave:
http://blog.sqlauthority.com/2007/04/29/sql-server-random-number-generator-script-sql-query/
(Zrobiłem niewielką zmianę w @ Upper- aby uwzględnić wyższą liczbę, dodałem 1.)
źródło
Po prostu:
Możesz zmienić i edytować ten kod do swoich potrzeb.
źródło
Oto prosta i pojedyncza linia kodu
W tym celu użyj funkcji SQL Inbuild RAND () .
Oto formuła generowania liczby losowej między dwiema liczbami (zakres RETURN INT)
Tutaj a to Twoja pierwsza liczba (Min), a b to druga liczba (Max) w zakresie
Uwaga: Możesz również użyć funkcji CAST lub CONVERT, aby uzyskać numer zakresu INT.
(CAST (RAND () * (25-10) +10 AS INT))
Przykład:
Oto formuła generowania liczby losowej między dwiema liczbami (zakres RETURN DECIMAL)
Przykład:
Więcej szczegółów sprawdź: https://www.techonthenet.com/sql_server/functions/rand.php
źródło
źródło
SELECT ROUND((6 - 3 * 0.16), 0) SELECT ROUND((6 - 3 * 0.17), 0) SELECT ROUND((6 - 3 * 0.5), 0) SELECT ROUND((6 - 3 * 0.51), 0) SELECT ROUND((6 - 3 * 0.83), 0) SELECT ROUND((6 - 3 * 0.84), 0)
pokazuje, że zmiana 16% na 6, ~ 34% to 5, ~ 34% to 4, a ~ 16% to 3.Odpowiedź Lamaka jako funkcja:
źródło
Krok po kroku
Zauważ, że funkcja zdefiniowana przez użytkownika nie pozwala więc na użycie RAND (). Aby obejść ten problem (źródło: http://blog.sqlauthority.com/2012/11/20/sql-server-using-rand-in-user-defined-functions-udf/ ), najpierw należy utworzyć widok.
a następnie utwórz funkcję losową
źródło
Ogólnie:
Twoje pytanie:
<=>
źródło