Uso de Operaciones Matemáticas en Consultas
Obtenga información sobre las funciones matemáticas soportadas en Oracle NoSQL Database Cloud Service.
Las funciones matemáticas se utilizan para realizar cálculos matemáticos en los argumentos de entrada. Aquí, los argumentos proporcionados son expresiones que se resuelven en números.
Puede llamar a las funciones matemáticas desde las cláusulas SELECT/WHERE y también desde otras sentencias Oracle NoSQL en las que se permiten llamadas de función en la sintaxis. Por ejemplo, puede proporcionar funciones matemáticas como argumentos para Usar funciones agregadas.
Las siguientes funciones están soportadas en Oracle NoSQL Database Cloud Service:
Tabla 1 - Funciones matemáticas
| Función | Descripción |
|---|---|
| abs(n) | Devuelve el valor absoluto de n. |
| acos(n) | Devuelve el arcocoseno de n expresado en radianes. |
| asin(n) | Devuelve el arcoseno de n expresado en radianes. |
| atan(n) | Devuelve el arcotangente de n expresado en radianes. |
| atan2(n1,n2) | Devuelve el arco tangente de los argumentos n1 y n2 expresados en radianes. |
| techo(n) | Devuelve el entero más pequeño que es mayor o igual que n. |
| cos(n) | Devuelve el coseno de un ángulo n especificado en radianes. |
| cuna(n) | Devuelve el valor cotangente de un ángulo n especificado en radianes. |
| grados (n) | Convierte n de radianes a grados. |
| (e) | Devuelve el valor del número de Euler e. |
| exp(n) | Devuelve el valor exponencial de la expresión n. |
| piso(n) | Devuelve el mayor número entero menor o igual que n. |
| ln(n) | Devuelve el valor logarítmico natural (base e) de n. |
| log(n,b) | Devuelve el valor b de base logarítmica de n. |
| log10(n) | Devuelve el valor 10 de la base logarítmica de n. |
| pi() | Devuelve el valor de pi. |
| potencia(n2,n1) | Devuelve el valor de n2 elevado a la energía n1. |
| radianes(n) | Convierte n de grados a radianes. |
| rand() | Devuelve un número pseudoaleatorio entre cero y uno. |
| ronda(n [,d]) | Redondea n a d posiciones a la derecha de la coma decimal. |
| signo(n) | Devuelve el signo de n. |
| sin(n) | Devuelve el seno de un ángulo n especificado en radianes. |
| raíz(n) | Devuelve la raíz cuadrada de n. |
| tan(n) | Devuelve la tangente de un ángulo n especificado en radianes. |
| trunc(n [,d]) | Devuelve el valor de n truncado a d decimales. |
Nota:
-
Los nombres de las funciones matemáticas son sensibles a mayúsculas/minúsculas.
-
Todas las funciones matemáticas esperan tipos numéricos (entero, largo, flotante, doble y número) como argumentos. Estas funciones devuelven NULL en los siguientes casos. Aquí, NULL hace referencia a SQL NULL a menos que se especifique lo contrario.
-
Cualquiera de los argumentos se resuelve en NULL.
-
Cualquiera de los argumentos es un campo de una columna JSON cuyo valor es NULL, es decir, JSON NULL.
-
Cualquiera de los argumentos es un campo en una columna JSON, que no existe.
-
Cualquiera de los argumentos es un campo en la recopilación de JSON, que no existe.
-
Cualquiera de los argumentos no se resuelve en un tipo numérico.
-
-
Al utilizar funciones trigonométricas como sin(n), cos(n), etc., debe especificar el valor de entrada en radianes. Puede convertir un ángulo de grados a radianes mediante la función radian(n). Del mismo modo, para funciones trigonométricas inversas como asin(n), acos(n), etc., puede convertir el valor de radianes resultante a grados mediante la función degrees(n).
Para seguir los ejemplos de las secciones, puede crear las tablas y cargar los datos como se describe en la sección Ejemplos adicionales.
función abs
La función abs devuelve el valor absoluto de la expresión de entrada.
Ejemplo 1 - función abs
SELECT abs(n) FROM Userstocks
| Valor de n | Salida |
|---|---|
| 10 | 10 |
| -10 | 10 |
| 1,67 | 1,67 |
| -1,67 | 1,67 |
función del coseno del arco
La función acos es una función trigonométrica inversa. La función acos devuelve el coseno del arco (inverso del coseno) de la expresión de entrada.
Ejemplo 1: función de coseno de arco
SELECT acos(n) FROM Archery
| Valor de n | Salida |
|---|---|
| 1 | 0 |
| 0 | 1,571 |
| sqrt(3)/2 | 0,524 |
| 0,5 | 1,047 |
| -1 | 3,142 |
función seno arco
La función asin es una función trigonométrica inversa. La función asin devuelve el seno de arco (inverso del seno) de la expresión de entrada.
Ejemplo 1: función sinusoidal de arco
SELECT asin(n) FROM Archery
| Valor de n | Salida |
|---|---|
| 1 | 1,571 |
| sqrt(3)/2 | 1,047 |
| 0,5 | 0,524 |
| -1 | -1,571 |
función de bronceado arco
La función atan es una función trigonométrica inversa. La función atan devuelve el arco tangente (inverso de tangente) de la expresión de entrada.
Ejemplo 1 - función de bronceado de arco
SELECT atan(n) FROM Archery
| Valor de n | Salida |
|---|---|
| 1 | 0,785 |
| Sqrt(3) | 1,047 |
función tan2 de arco
La función atan2 es una función trigonométrica inversa. La función atan2 es una función tangente de arco de dos argumentos (inverso de bronceado), que devuelve la tangente de arco de una coordenada o punto en un espacio bidimensional (n1, n2) calculado como atan(n2/n1).
Ejemplo 1 - función tan2 de arco
SELECT atan2(n1,n2) FROM Archery
| Valor de n1 | Valor de n2 | Salida |
|---|---|---|
| 1 | 1 | 0,785 |
| 1 | Sqrt(3) | 1,047 |
| 2 | 0 | 1,571 |
función de techo
La función ceil devuelve el entero más pequeño que es mayor o igual que la expresión especificada.
Ejemplo 1: función de techo
SELECT ceil(n) FROM Userstocks
| Valor de n | Salida |
|---|---|
| 1,34 | 2 |
| -1,34 | -1 |
| pi() | 4 |
función costera
La función cos es una función trigonométrica. La función cos devuelve el coseno de un ángulo especificado en radianes.
Ejemplo 1: función coseno
SELECT cos(n) FROM Archery
| Valor de n | Salida |
|---|---|
| 0 | 1 |
| radianes(90) | 6.123233995736766E-17 |
| pi() | -1 |
función cotangente
La función cot es una función trigonométrica. La función cot devuelve la cotangente de un ángulo especificado en radianes.
Ejemplo 1 - función cotangent
SELECT cot(n) FROM Archery
| Valor de n | Salida |
|---|---|
| 0 | Infinito |
| radianes(90) | 6.123233995736766E-17 |
| pi()/4 | 1 |
función de grados
La función degrees convierte la expresión especificada de radianes a grados.
Ejemplo 1: función de grados
SELECT degrees(n) FROM Archery
| Valor de n | Salida |
|---|---|
| pi()/2 | 90 |
| 0 | 0 |
Función Euler
La función e devuelve el valor del número de Euler e, es decir, 2.718281828459045.
Ejemplo 1 - Función Euler
SELECT e() AS EULER FROM Archery
Salida:
+-----------+-------------------+
| EULER | 2.718281828459045 |
+-----------+-------------------+
función exp
La función exp devuelve el valor exponencial de la expresión especificada, es decir, e elevado a la potencia de la expresión especificada. Aquí, e es la base del logaritmo natural y tiene el valor 2.718281828459045.
Ejemplo 1 - función exp
SELECT exp(n) FROM PHtable
| Valor de n | Salida |
|---|---|
| 0 | 1 |
| 2 | 7,389 |
| -2 | 0,135 |
función de piso
La función floor devuelve el entero más grande que es menor o igual que la expresión especificada.
Ejemplo 1: función de piso
SELECT floor(n) FROM Userstocks
| Valor de n | Salida |
|---|---|
| 1,34 | 1 |
| -1,34 | -2 |
| pi() | 3 |
función ln
La función ln devuelve el valor logarítmico natural (base e) de la expresión especificada.
Ejemplo 1: función ln
SELECT ln(n) FROM PHtable
| Valor de n | Salida |
|---|---|
| 1 | 0 |
| 10 | 2,303 |
| 1.0E-7 | -16,118 |
función log
La función log devuelve el valor logarítmico con la base especificada para la expresión dada.
Ejemplo 1: función de log
SELECT log(n,b) FROM PHtable
| Valor de n | Valor de b | Salida |
|---|---|---|
| 2 | 2 | 1 |
| 81 | 3 | 4 |
| 255 | 5 | 3,443 |
función log10
La función log10 devuelve el valor logarítmico con la base 10 para la expresión especificada.
Ejemplo 1: función log10
SELECT log10(n) FROM PHtable
| Valor de n | Salida |
|---|---|
| 1 | 0 |
| 10 | 1 |
| 1.0E-7 | -7 |
función pi
La función pi devuelve el valor pi, es decir, 3.141592653589793.
Ejemplo 1 - función pi
SELECT pi() AS PI FROM Archery
Salida:
+-----------+-------------------+
| PI | 3.141592653589793 |
+-----------+-------------------+
función de potencia
La función pow devuelve el valor de la primera expresión elevada a la potencia de la segunda expresión.
Ejemplo 1: función de potencia
SELECT pow(n2,n1) FROM PHtable
| Valor de n | Valor de b | Salida |
|---|---|---|
| 2 | 4 | 16 |
| 2 | 0 | 1 |
| -0,5 | 4 | 0,062 |
| 0,5 | -4 | 16 |
función radian
La función radians convierte la expresión especificada de grados a radianes.
Ejemplo 1: función de radianes
SELECT radians(n) FROM Archery
| Valor de n | Salida |
|---|---|
| 180 | 3,142 |
| 0 | 0 |
función aleatoria
La función rand devuelve un número pseudoaleatorio positivo. El valor resultante puede ser mayor o igual que cero y menor que uno.
Ejemplo 1: función aleatoria
SELECT rand() AS RANDOM from Archery WHERE sim=1
Salida:
+-----------+-------------------+
| RANDOM | 0.891655403699787 |
+-----------+-------------------+
redondear función
La función round redondea el valor de una expresión de entrada a los decimales especificados a la derecha de la coma decimal.
Ejemplo 1 - función redonda
SELECT round(n,d) FROM Userstocks
| Valor de n | Valor de d | Salida |
|---|---|---|
| 100,331 | 2 | 100,33 |
| 100,367 | 2 | 100,37 |
| 111,567 | 0,5 | 112 |
| 111,567 | 4 | 111,567 |
| 10,361 | 0 o no se ha especificado | 10 |
| 111,331 | -2 | 100 |
| 111,331 | -4 | 0 |
| -100,331 | 2 | -100,33 |
| -111,331 | -2 | -100 |
función de firma
La función sign devuelve el signo de la expresión especificada, es decir, cero si el argumento es cero, 1 si el argumento es mayor que cero y -1 si el argumento es menor que cero.
Ejemplo 1: función de signo
SELECT sign(n) FROM PHtable
| Valor de n | Salida |
|---|---|
| 1,89 | 1 |
| -1,89 | -1 |
| 0 | 0 |
| sin(3*pi()/2) | -1 |
función seno
La función sin es una función trigonométrica. La función sin devuelve el seno de un ángulo especificado en radianes.
Ejemplo 1 - función sinusoidal
SELECT sin(n) FROM Archery
| Valor de n | Salida |
|---|---|
| radianes(90) | 1 |
| pi()/4 | 0,707 |
| 3*pi()/2 | -1 |
función cuadrada de raíz
La función sqrt devuelve la raíz cuadrada de la expresión especificada.
Ejemplo 1 - función de raíz cuadrada
SELECT sqrt(n) FROM Archery
| Valor de n | Salida |
|---|---|
| 16 | 4 |
| 12.57/pi() | 2 |
función tangente
La función tan es una función trigonométrica. La función tan devuelve la tangente de un ángulo especificado en radianes.
Ejemplo 1: función tangente
SELECT tan(n) FROM Archery
| Valor de n | Salida |
|---|---|
| 0 | 0 |
| radianes(90) | 1.633123935319537E16, |
| pi()/4 | 1 |
truncar función
La función trunc trunca el valor de una expresión de entrada a los decimales especificados a la derecha de la coma decimal.
Ejemplo 1: función truncar
SELECT trunc(n,d) FROM Userstocks
| Valor de n | Valor de d | Salida |
|---|---|---|
| 111,567 | 0 o no se ha especificado | 100 |
| 111,567 | 2 | 100,56 |
| 111,567 | 3 | 111,567 |
| 111,567 | -2 | 100 |
| 111,567 | -3 | 0 |
| -111,567 | 2 | -100,567 |
| -111,567 | -1 | -110 |
Ejemplos con la API QueryRequest
Puede utilizar la API QueryRequest y aplicar funciones SQL para recuperar datos de una tabla NoSQL similar a las funciones de registro de hora y las funciones de cadena.
Los siguientes fragmentos de código muestran cómo utilizar las funciones matemáticas para consultar la tabla Userstocks.
Para ejecutar la consulta, utilice la API NoSQLHandle.query().
String queryStatement =
"SELECT stock, " +
"ceil(units * sellRate - units * buyRate) AS PROFIT, " +
"abs(units * sellRate - units * buyRate) AS TURNOVER, " +
"round(abs(units * sellRate - units * buyRate) * 0.5 / 100, 2) " +
"AS BROKERAGE " +
"FROM Userstocks";
try (QueryRequest request =
new QueryRequest().setStatement(queryStatement);
QueryIterableResult results = handle.queryIterable(request)) {
for (MapValue row : results) {
System.out.println(row);
}
}
Para ejecutar la consulta, utilice el método borneo.NoSQLHandle.query().
query_statement = '''
SELECT stock,
ceil(units * sellRate - units * buyRate) AS PROFIT,
abs(units * sellRate - units * buyRate) AS TURNOVER,
round(
abs(units * sellRate - units * buyRate) * 0.5 / 100,
2
) AS BROKERAGE
FROM Userstocks
'''
request = QueryRequest().set_statement(query_statement)
while True:
result = handle.query(request)
for row in result.get_results():
print(row)
if request.is_done():
break
Para ejecutar una consulta, utilice la función Client.Query.
queryStatement := `
SELECT stock,
ceil(units * sellRate - units * buyRate) AS PROFIT,
abs(units * sellRate - units * buyRate) AS TURNOVER,
round(
abs(units * sellRate - units * buyRate) * 0.5 / 100,
2
) AS BROKERAGE
FROM Userstocks`
prepareRequest := &nosqldb.PrepareRequest{
Statement: queryStatement,
}
prepareResult, err := client.Prepare(prepareRequest)
if err != nil {
fmt.Println("Prepare failed:", err)
return
}
queryRequest := &nosqldb.QueryRequest{
PreparedStatement: &prepareResult.PreparedStatement,
}
for {
queryResult, err := client.Query(queryRequest)
if err != nil {
fmt.Println("Query failed:", err)
return
}
rows, err := queryResult.GetResults()
if err != nil {
fmt.Println("Unable to get results:", err)
return
}
for _, row := range rows {
fmt.Println(jsonutil.AsJSON(row.Map()))
}
if queryRequest.IsDone() {
break
}
}
Para ejecutar una consulta, utilice el método query.
const queryStatement = `
SELECT stock,
ceil(units * sellRate - units * buyRate) AS PROFIT,
abs(units * sellRate - units * buyRate) AS TURNOVER,
round(
abs(units * sellRate - units * buyRate) * 0.5 / 100,
2
) AS BROKERAGE
FROM Userstocks`;
const options = {};
do {
const result = await handle.query(queryStatement, options);
for (const row of result.rows) {
console.log(row);
}
options.continuationKey = result.continuationKey;
} while (options.continuationKey);
Para ejecutar una consulta, puede llamar al método QueryAsync o llamar al método GetQueryAsyncEnumerable e iterar sobre el enumerable asíncrono resultante.
private const string QueryStatement = @"
SELECT stock,
ceil(units * sellRate - units * buyRate) AS PROFIT,
abs(units * sellRate - units * buyRate) AS TURNOVER,
round(
abs(units * sellRate - units * buyRate) * 0.5 / 100,
2
) AS BROKERAGE
FROM Userstocks";
var queryEnumerable =
client.GetQueryAsyncEnumerable(QueryStatement);
await foreach (var result in queryEnumerable)
{
foreach (var row in result.Rows)
{
Console.WriteLine(row.ToJsonString());
}
}
Otros ejemplos
Aprender a utilizar funciones matemáticas en aplicaciones.
Ejemplo 1 - Aplicación de funciones matemáticas para recuperar transacciones intradía de una aplicación de negociación
Considere una tabla Userstocks que contenga transacciones intradía de un comerciante de acciones en una aplicación de negociación.
El DDL de la tabla es el siguiente:
CREATE TABLE Userstocks (id INTEGER,
stock STRING,
units INTEGER,
buyRate DOUBLE,
sellRate DOUBLE,
PRIMARY KEY (id))
El campo id contiene el ID de la empresa, el campo stock contiene el nombre de la empresa en la que el usuario tiene opciones de acciones, el campo units contiene el número de acciones propiedad del usuario, buyRate es el precio al que el usuario ha comprado las acciones y sellRate es el precio al que el usuario vende sus acciones.
Insertar filas de ejemplo en la tabla:
INSERT into Userstocks VALUES (1, "company1", 100, 10.2, 11.5)
INSERT into Userstocks VALUES (2, "company2", 20, 15, 14.7)
Puede utilizar la siguiente consulta para aplicar funciones matemáticas y recuperar los detalles de transacción necesarios de la tabla:
SELECT stock,
ceil(units*sellRate-units*buyRate) AS PROFIT,
abs(units*sellRate-units*buyRate) AS TURNOVER,
round(abs(units*sellRate-units*buyRate)*0.5/100, 2) AS BROKERAGE
FROM Userstocks
Explicación: en la consulta anterior, recupera la rotación del día, las ganancias/pérdidas y los cargos de corretaje. Calcula las ganancias/pérdidas mediante las expresiones aritméticas proporcionadas y aplica la función de techo para obtener el resultado como el valor entero más cercano. Calcula las ganancias/pérdidas y aplica la funciónabs para calcular la rotación de cada transacción. Los cargos de corretaje se calculan aplicando el 0,5 % en cada rotación y redondeando el resultado a dos decimales mediante la función round.
Salida:
{"stock":"company2","PROFIT":-6.0,"TURNOVER":6.0,"BROKERAGE":0.03}
{"stock":"company1","PROFIT":131.0,"TURNOVER":130.0000000000001,"BROKERAGE":0.65}
Ejemplo 2 - Aplicar funciones matemáticas para calcular la distancia de disparo en una aplicación de juego
Considere una tabla Archery que contenga datos para el disparo de destino en una aplicación de juego.
El DDL de la tabla es el siguiente:
CREATE TABLE Archery (sim INTEGER,
angle DOUBLE,
elevation DOUBLE,
PRIMARY KEY (sim) )
El campo sim identifica el conteo de simulación, el campo angle incluye diferentes ángulos (en grados) a los que un jugador puede apuntar a un objetivo, el campo elevation contiene la altura (en metros) en la que se coloca el objetivo.
Insertar filas de ejemplo en la tabla:
INSERT INTO Archery VALUES (1, 30, 50)
INSERT INTO Archery VALUES (2, 45, 50)
INSERT INTO Archery VALUES (3, 70, 95)
Puede aplicar funciones matemáticas en la siguiente consulta para calcular la distancia de disparo para varios ángulos y elevaciones del objetivo.
SELECT sim, trunc(elevation/sin(radians(angle)),2) AS SLOPE FROM Archery ORDER BY
sim
Explicación: para alcanzar un objetivo colocado en una determinada elevación, el jugador apunta a un ángulo y dispara una cierta distancia. Estos elementos forman un lado de un triángulo de ángulo recto, un ángulo agudo y una hipotenusa. En esta consulta, se calcula la distancia de disparo para varias combinaciones de la elevación del objetivo y los ángulos en función de la posición del jugador desde el objetivo. Utilice la función de radianes para convertir los ángulos a radianes y calcular el valor sinusoidal mediante la función sinusoidal. La elevación se divide entre el valor seno para calcular la distancia y truncar el resultado a dos decimales mediante la función truncar.
Salida:
{"sim":1,"SLOPE ":100.0}
{"sim":2,"SLOPE ":70.71}
{"sim":3,"SLOPE ":101.09}
Ejemplo 3 - Utilizar las funciones matemáticas para calcular el valor PH de una solución determinada
Considere una concentración de iones de hidrógeno que contenga PHtable para diferentes soluciones.
El DDL de la tabla es el siguiente:
CREATE TABLE PHtable (id INTEGER,
sampleName STRING,
hIons DOUBLE,
phValue DOUBLE,
PRIMARY KEY (id) )
El campo id contiene el identificador de la muestra de solución, el campo sampleName contiene el nombre de la muestra dada, el campo hIons es la concentración de iones de hidrógeno en moles por litro del líquido, y el campo phValue es el valor PH de la solución. Puede utilizar el valor hIons para calcular el valor phValue de una solución. Inicialice la columna phValue en NULL al insertar datos en la tabla.
Insertar filas de ejemplo en la tabla:
INSERT INTO PHtable VALUES (1, "sample1", 0.0063095734448019, NULL)
INSERT INTO PHtable VALUES (2, "sample2", 5.0118723362727E-9, NULL)
INSERT INTO PHtable VALUES (3, "sample3", 1.0E-7, NULL)
Puede utilizar las funciones matemáticas para calcular el valor PH de una solución determinada y actualizar la tabla mediante la siguiente consulta:
UPDATE PHtable SET phValue=trunc((log10(1/hIons)),1) where id=1 RETURNING
*
Explicación: el valor PH indica la concentración de ácidos o bases en una solución. En esta consulta, se utiliza la función log10 para calcular el valor PH de una solución mediante la fórmula PH=log10(1/hIons). Como el valor de retorno de la función es doble, se utiliza la función truncar para truncar el resultado a un decimal. La sentencia UPDATE se utiliza para definir el valor de PH resultante en el campo phValue para la solución especificada.
Salida:
{"id":1,"sampleName":"sample1","hIons":0.0063095734448019,"phValue":2.2}
También puede utilizar las funciones matemáticas en la cláusula WHERE. En este ejemplo, encontrará las muestras ácidas (PH < 7) mediante la siguiente consulta:
SELECT sampleName AS ACIDIC FROM PHtable WHERE trunc((log10(1/hIons)),1) <
7.0
Salida:
{"ACIDIC":"sample1"}