Compartir a través de


RAND (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsBase de datos de Azure SQL en Microsoft Fabric

Devuelve un valor flotante pseudoaleatorio de 0 a través 1de , exclusivo.

Convenciones de sintaxis de Transact-SQL

Sintaxis

RAND ( [ seed ] )

Nota:

El grupo de SQL sin servidor no admite esta sintaxis en Azure Synapse Analytics.

Argumentos

seed

Una expresión entera (tinyint, smallint o int) que da el valor semilla. Si no se especifica inicialización, el motor de base de datos de SQL Server asigna un valor de inicialización de forma aleatoria. Para un valor de inicialización especificado, el resultado devuelto es siempre el mismo.

Tipos de valores devueltos

float

Comentarios

Las llamadas repetitivas de RAND() con el mismo valor de inicialización devuelven los mismos resultados.

  • Para una conexión, si se llama a RAND() con el valor de inicialización especificado, todas las llamadas posteriores de RAND() generan resultados basados en la llamada a RAND() inicializada. Por ejemplo, la siguiente consulta siempre devuelve la misma secuencia de números.

    SELECT RAND(100),
            RAND(),
            RAND();
    
  • Cuando se usa la función RAND() en una consulta UPDATE o INSERT, todas las filas afectadas obtienen el mismo valor.

Ejemplos

A. Crea cuatro números aleatorios diferentes

En el siguiente ejemplo se producen cuatro números aleatorios diferentes, generados con la función RAND().

DECLARE @counter AS SMALLINT;

SET @counter = 1;

WHILE @counter < 5
    BEGIN
        SELECT RAND() AS RandomNumber;
        SET @counter = @counter + 1;
    END
GO

B. Genera aleatoriamente 0 o 1

El siguiente ejemplo utiliza la ROUND() función para devolver aleatoriamente o bien 0 o 1.

SELECT ROUND(RAND(), 0) AS ZeroOrOne;
GO

Nota:

En este ejemplo, la FLOOR() función siempre devuelve 0, mientras que la CEILING() función siempre devuelve 1.

C. Generar números aleatorios mayores que 1

Puedes escalar el rango del flotador aleatorio multiplicando la RAND() función por un valor entero. El siguiente ejemplo devuelve un flotador aleatorio entre 0 y 10.

DECLARE @Constant AS INT;
SET @Constant = 10;

SELECT @Constant * RAND() AS RandomNumber;
GO

D. Generar enteros aleatorios

Puedes generar un valor entero aleatorio escalando la RAND() función y combinándola con las ROUND()funciones , FLOOR(), o CEILING() . El siguiente ejemplo devuelve un entero aleatorio entre 0 y 10, inclusive.

DECLARE @Constant AS INT;
SET @Constant = 10;

SELECT ROUND(@Constant * RAND(), 0) AS FirstRandomInteger,
       FLOOR(@Constant * RAND()) AS SecondRandomInteger,
       CEILING(@Constant * RAND()) AS ThirdRandomInteger;
GO

E. Insertar valores aleatorios en una tabla

El siguiente ejemplo llena una variable de tabla con valores aleatorios int, float y bit .

DECLARE @RandomTable TABLE (
    RandomIntegers INT,
    RandomFloats FLOAT,
    RandomBits BIT);

DECLARE @RowCount AS INT;
DECLARE @Counter AS INT;

SET @RowCount = 10;
SET @Counter = 1;

WHILE @Counter <= @RowCount
    BEGIN
        INSERT INTO @RandomTable
        VALUES (ROUND(10 * RAND(), 0), RAND(), CAST (ROUND(RAND(), 0) AS BIT));
        SET @Counter = @Counter + 1;
    END

SELECT *
FROM @RandomTable;
GO