Uso de funciones de cadena en consultas
Hay varias funciones incorporadas en las cadenas. En cualquier cadena, la posición comienza en 0 y termina en longitud - 1.
Si desea seguir los ejemplos, consulte Datos de ejemplo para ejecutar consultas para ver un ejemplo de datos y utilizar los scripts para cargar datos de ejemplo para la prueba. Los scripts crean las tablas que se utilizan en los ejemplos y cargan los datos en las tablas.
Si desea seguir los ejemplos, consulte Datos de ejemplo para ejecutar consultas para ver un ejemplo de datos y aprender a utilizar la consola de OCI para crear tablas de ejemplo y cargar datos mediante archivos JSON.
función de subcadena
La función substring extrae una cadena de una cadena determinada según una posición inicial numérica determinada y una longitud de subcadena numérica determinada.
returnvalue substring (source, position [, substring_length] )
source ::= any*
position ::= integer*
substring_length ::= integer*
returnvalue ::= string
Ejemplo: recupere los tres primeros caracteres de los detalles de enrutamiento de un pasajero con el número de ticket 1762376407826.
SELECT substring(bag.baginfo.routing,0,3) AS Source
FROM baggageInfo bag
WHERE ticketNo=1762376407826
Salida:
{"Source":"JFK"}
Concatenación, función
La función concat concatena todos sus argumentos y muestra la cadena concatenada como salida.
returnvalue concat (source,[source*])
source ::= any*
returnvalue ::= string
Ejemplo: muestra el enrutamiento de un cliente con un número de ticket determinado como "La ruta para el nombre_pasajero es …".
SELECT concat("The route for passenger ",fullName , " is ", bag.baginfo[0].routing)
FROM baggageInfo bag
WHERE ticketNo=1762376407826
Salida:
{"Column_1":"The route for passenger Dierdre Amador is JFK/MAD"}
funciones superiores e inferiores
upper y lower son funciones simples que se convierten a mayúsculas o minúsculas, respectivamente. La función upper convierte todos los caracteres de una cadena a mayúsculas. La función lower convierte todos los caracteres de una cadena a minúsculas.
returnvalue upper (source)
returnvalue lower (source)
source ::= any*
returnvalue ::= string
Ejemplo 1: recupere el nombre completo del pasajero en mayúsculas cuyo número de ticket es 1762376407826.
SELECT upper(fullname) AS FULLNAME_CAPITALS
FROM BaggageInfo
WHERE ticketNo=1762376407826
Salida:
{"FULLNAME_CAPITALS":"DIERDRE AMADOR"}
Ejemplo 2: recupere el nombre completo del pasajero en minúscula cuyo número de ticket es 1762376407826.
SELECT lower(fullname) AS fullname_lowercase
FROM BaggageInfo WHERE ticketNo=1762376407826
Salida:
{"fullname_lowercase":"dierdre amador"}
función trim
La función trim permite recortar los caracteres iniciales o finales (o ambos) de una cadena. La función ltrim permite recortar los caracteres iniciales de una cadena. La función rtrim permite recortar los caracteres finales de una cadena.
returnvalue trim(source [, position [, trim_character]])
source ::= any*
position ::= "leading"|"trailing"|"both"
trim_character ::= string*
returnvalue ::= string
returnvalue ltrim(source)
returnvalue rtrim(source)
source ::= any*
returnvalue ::= string
Ejemplo: elimine los espacios en blanco iniciales y finales de los detalles de ruta del pasajero cuyo número de ticket sea 1762350390409.
SELECT trim(bag.baginfo[0].routing,"trailing"," ")
FROM BaggageInfo bag
WHERE ticketNo=1762376407826
Salida:
{"Column_1":"JFK/MAD"}
Uso de la función ltrim para eliminar espacios iniciales:
SELECT ltrim(bag.baginfo[0].routing)
FROM BaggageInfo bag
WHERE ticketNo=1762376407826
Salida:
{"Column_1":"JFK/MAD"}
Uso de la función rtrim para eliminar los espacios finales:
SELECT rtrim(bag.baginfo[0].routing)
FROM BaggageInfo bag
WHERE ticketNo=1762376407826
Salida:
{"Column_1":"JFK/MAD"}
función de longitud
La función length devuelve la longitud de una cadena de caracteres. La función length calcula la longitud utilizando el juego de caracteres UTF.
returnvalue length(source)
source ::= any*
returnvalue ::= integer
Ejemplo: busque la longitud del nombre completo del pasajero cuyo número de ticket es 1762350390409.
SELECT fullname, length(fullname) AS fullname_length
FROM BaggageInfo
WHERE ticketNo=1762350390409
Salida:
{"fullname":"Fallon Clements","fullname_length":15}
contiene la función
La función contains indica si hay o no una cadena de búsqueda dentro de la cadena de origen.
returnvalue contains(source, search_string)
source ::= any*
search_string ::= any*
returnvalue ::= boolean
Ejemplo: recupera los nombres completos de los pasajeros que tienen "SFO" en su ruta.
SELECT fullname FROM baggageInfo bag
WHERE EXISTS bag.bagInfo[contains($element.routing,"SFO")]
Salida:
{"fullname":"Michelle Payne"}
{"fullname":"Lucinda Beckman"}
{"fullname":"Henry Jenkins"}
{"fullname":"Lorenzo Phil"}
{"fullname":"Gerard Greene"}
funciones start_with y end_with
La función starts_with indica si la cadena de origen comienza o no con la cadena de búsqueda.
returnvalue starts_with(source, search_string)
source ::= any*
search_string ::= any*
returnvalue ::= boolean
La función ends_with indica si la cadena de origen termina o no con la cadena de búsqueda.
returnvalue ends_with(source, search_string)
source ::= any*
search_string ::= any*
returnvalue ::= boolean
Ejemplo: ¿Cuánto tiempo tarda desde el momento del registro de entrada hasta el momento en que se escanea la bolsa en el punto de embarque del pasajero con el número de ticket 176234463813?
SELECT $flightLeg.flightNo,
$flightLeg.actions[contains($element.actionCode, "Checkin")].actionTime AS checkinTime,
$flightLeg.actions[contains($element.actionCode, "BagTag Scan")].actionTime AS bagScanTime,
timestamp_diff(
$flightLeg.actions[contains($element.actionCode, "Checkin")].actionTime,
$flightLeg.actions[contains($element.actionCode, "BagTag Scan")].actionTime
) AS diff
FROM baggageinfo $s, $s.bagInfo[].flightLegs[] AS $flightLeg
WHERE ticketNo=176234463813
AND starts_with($s.bagInfo[].routing, $flightLeg.fltRouteSrc)
Explicación: en los datos de equipaje, cada flightLeg tiene una matriz de acciones. Hay tres acciones diferentes en la matriz de acciones. El código de acción para el primer elemento de la matriz es Protección/Descarga. Para el primer tramo, el código de acción es Protección y para el resto de tramos, el código de acción es Descarga en el salto. El código de acción para el segundo elemento de la matriz es Escaneo de BagTag. En la consulta anterior, se determina la diferencia en el tiempo de acción entre la exploración de etiqueta de bolsa y la hora de entrada. La función contains se utiliza para filtrar la hora de acción solo si el código de acción es Entrada o BagScan. Dado que solo el primer tramo de vuelo tiene detalles de check-in y escaneo de bolsas, también filtra los datos mediante la función starts_with para recuperar solo el código fuente fltRouteSrc.
Salida:
{"flightNo":"BM572","checkinTime":"2019-03-02T03:28:00Z",
"bagScanTime":"2019-03-02T04:52:00Z","diff":-5040000}
Ejemplo 2: busque la lista de pasajeros cuyo destino es JTR.
SELECT fullname FROM baggageInfo $bagInfo
WHERE ends_with($bagInfo.bagInfo[].routing, "JTR")
Salida:
{"fullname":"Lucinda Beckman"}
{"fullname":"Gerard Greene"}
{"fullname":"Michelle Payne"}
index_of, función
La función index_of determina la posición del primer carácter de la cadena de búsqueda en su primera incidencia, si la hay.
returnvalue index_of(source, search_string [, start_position])
source ::= any*
search_string ::= any*
start_position ::= integer*
returnvalue ::= integer
Varios valores de retorno:
-
Devuelve la posición del primer carácter de la cadena de búsqueda en su primera aparición. La posición es relativa a la posición inicial de la cadena (que es cero).
-
Devuelve -1 si
search_stringno está presente en el origen. -
Devuelve 0 para cualquier valor de origen si
search_stringtiene una longitud de 0. -
Devuelve NULL si algún argumento es NULL.
-
Devuelve NULL si cualquier argumento es una secuencia vacía o una secuencia con más de un elemento.
-
Devuelve un error si el argumento
start_positionno es un entero.
Ejemplo 1: determine en qué posición se encuentra "-" en la hora de llegada estimada del primer tramo para el pasajero con el número de ticket 1762320569757.
SELECT index_of(bag.baginfo.flightLegs[0].estimatedArrival,"-")
FROM BaggageInfo bag
WHERE ticketNo=1762320569757
Salida:
{"Column_1":4}
Ejemplo 2: determine en qué posición se encuentra "/" en el enrutamiento del primer tramo para el pasajero con el número de ticket 1762320569757. Esto le ayudará a determinar cuántos caracteres hay para el punto de origen del pasajero con el número de ticket 1762320569757.
SELECT index_of(bag.baginfo.routing,"/")
FROM BaggageInfo bag
WHERE ticketNo=1762320569757
Salida:
"Column_1":3}
función de sustitución
La función replace devuelve el origen con cada incidencia de la cadena de búsqueda sustituida por la cadena de sustitución.
returnvalue replace(source, search_string [, replacement_string])
source ::= any*
search_string ::= any*
replacement_string ::= any*
returnvalue ::= string
Ejemplo: sustituya la ubicación de origen del pasajero por el número de ticket 1762320569757 de SFO a SOF.
SELECT replace(bag.bagInfo[0].routing,"SFO","SOF")
FROM baggageInfo bag
WHERE ticketNo=1762320569757
Salida:
{"Column_1":"SOF/IST/ATH/JTR"}
Ejemplo 2: sustituya la comilla doble en el nombre del pasajero por una comilla simple.
Si sus datos pueden contener una comilla doble en el nombre del pasajero, puede utilizar la función de sustitución para cambiar la comilla doble a una comilla simple.
SELECT fullname,
replace(fullname, """, "'") as new_fullname
FROM BaggageInfo bag
función inversa
La función reverse devuelve los caracteres de la cadena de origen en orden inverso, donde la cadena se escribe primero con el último carácter.
returnvalue reverse(source)
source ::= any*
returnvalue ::= string
Ejemplo: muestre el nombre completo y revierta el nombre completo del pasajero con el número de ticket 1762330498104.
SELECT fullname, reverse(fullname)
FROM baggageInfo
WHERE ticketNo=1762330498104
Salida:
{"fullname":"Michelle Payne","Column_2":"enyaP ellehciM"}
Ejemplos con la API QueryRequest
Puede utilizar la API QueryRequest y aplicar funciones SQL para recuperar datos de una tabla NoSQL.
Para ejecutar la consulta, utilice la API NoSQLHandle.query().
Descargue el código completo SQLFunctions.java de los ejemplos aquí.
//Fetch rows from the table
private static void fetchRows(NoSQLHandle handle,String sqlstmt) throws Exception {
try (
QueryRequest queryRequest = new QueryRequest().setStatement(sqlstmt);
QueryIterableResult results = handle.queryIterable(queryRequest)){
for (MapValue res : results) {
System.out.println("\t" + res);
}
}
}
String string_func1="SELECT substring(bag.baginfo.routing,0,3) AS Source FROM baggageInfo bag WHERE ticketNo=1762376407826";
System.out.println("Using substring function ");
fetchRows(handle,string_func1);
String string_func2="SELECT fullname, length(fullname) AS fullname_length FROM BaggageInfo WHERE ticketNo=1762320369957";
System.out.println("Using length function ");
fetchRows(handle,string_func2);
String string_func3="SELECT fullname FROM baggageInfo bag WHERE EXISTS bag.bagInfo[contains($element.routing,\"SFO\")]";
System.out.println("Using contains function ");
fetchRows(handle,string_func3);
Para ejecutar la consulta, utilice el método borneo.NoSQLHandle.query().
Descargue el código completo SQLFunctions.py de los ejemplos aquí.
# Fetch data from the table
def fetch_data(handle,sqlstmt):
request = QueryRequest().set_statement(sqlstmt)
print('Query results for: ' + sqlstmt)
result = handle.query(request)
for r in result.get_results():
print('\t' + str(r))
string_func1 = '''SELECT substring(bag.baginfo.routing,0,3) AS Source FROM baggageInfo bag
WHERE ticketNo=1762376407826'''
print('Using substring function:')
fetch_data(handle,string_func1)
string_func2 = '''SELECT fullname, length(fullname) AS fullname_length FROM BaggageInfo
WHERE ticketNo=1762320369957'''
print('Using length function:')
fetch_data(handle,string_func2)
string_func3 = '''SELECT fullname FROM baggageInfo bag WHERE
EXISTS bag.bagInfo[contains($element.routing,"SFO")]'''
print('Using contains function:')
fetch_data(handle,string_func3)
Para ejecutar una consulta, utilice la función Client.Query.
Descargue el código completo SQLFunctions.go de los ejemplos aquí.
//fetch data from the table
func fetchData(client *nosqldb.Client, err error, tableName string, querystmt string)(){
prepReq := &nosqldb.PrepareRequest{
Statement: querystmt,
}
prepRes, err := client.Prepare(prepReq)
if err != nil {
fmt.Printf("Prepare failed: %v\n", err)
return
}
queryReq := &nosqldb.QueryRequest{
PreparedStatement: &prepRes.PreparedStatement, }
var results []*types.MapValue
for {
queryRes, err := client.Query(queryReq)
if err != nil {
fmt.Printf("Query failed: %v\n", err)
return
}
res, err := queryRes.GetResults()
if err != nil {
fmt.Printf("GetResults() failed: %v\n", err)
return
}
results = append(results, res...)
if queryReq.IsDone() {
break
}
}
for i, r := range results {
fmt.Printf("\t%d: %s\n", i+1, jsonutil.AsJSON(r.Map()))
}
}
string_func1 := `SELECT substring(bag.baginfo.routing,0,3) AS Source FROM baggageInfo bag
WHERE ticketNo=1762376407826`
fmt.Printf("Using substring function:\n")
fetchData(client, err,tableName,string_func1)
string_func2 := `SELECT fullname, length(fullname) AS fullname_length FROM BaggageInfo
WHERE ticketNo=1762320369957`
fmt.Printf("Using length function:\n")
fetchData(client, err,tableName,string_func2)
string_func3 := `SELECT fullname FROM baggageInfo bag WHERE
EXISTS bag.bagInfo[contains($element.routing,"SFO")]`
fmt.Printf("Using contains function:\n")
fetchData(client, err,tableName,string_func3)
Para ejecutar una consulta, utilice el método query.
JavaScript: descargue el código completo SQLFunctions.js de los ejemplos aquí.
//fetches data from the table
async function fetchData(handle,querystmt) {
const opt = {};
try {
do {
const result = await handle.query(querystmt, opt);
for(let row of result.rows) {
console.log(' %O', row);
}
opt.continuationKey = result.continuationKey;
} while(opt.continuationKey);
} catch(error) {
console.error(' Error: ' + error.message);
}
}
TypeScript: descargue el código completo SQLFunctions.ts de los ejemplos aquí.
interface StreamInt {
acct_Id: Integer;
profile_name: String;
account_expiry: TIMESTAMP;
acct_data: JSON;
}
/* fetches data from the table */
async function fetchData(handle: NoSQLClient,querystmt: any) {
const opt = {};
try {
do {
const result = await handle.query<StreamInt>(querystmt, opt);
for(let row of result.rows) {
console.log(' %O', row);
}
opt.continuationKey = result.continuationKey;
} while(opt.continuationKey);
} catch(error) {
console.error(' Error: ' + error.message);
}
}
const string_func1 = `SELECT substring(bag.baginfo.routing,0,3) AS Source FROM baggageInfo bag
WHERE ticketNo=1762376407826`
console.log("Using substring function:");
await fetchData(handle,string_func1);
const string_func2 = `SELECT fullname, length(fullname) AS fullname_length FROM BaggageInfo
WHERE ticketNo=1762320369957`
console.log("Using length function");
await fetchData(handle,string_func2);
const string_func3 = `SELECT fullname FROM baggageInfo bag WHERE
EXISTS bag.bagInfo[contains($element.routing,"SFO")]`
console.log("Using contains function");
await fetchData(handle,string_func3);
Para ejecutar una consulta, puede llamar al método QueryAsync o llamar al método GetQueryAsyncEnumerable e iterar sobre el enumerable asíncrono resultante.
Descargue el código completo de SQLFunctions.cs en los ejemplos aquí.
private static async Task fetchData(NoSQLClient client,String querystmt){
var queryEnumerable = client.GetQueryAsyncEnumerable(querystmt);
await DoQuery(queryEnumerable);
}
private static async Task DoQuery(IAsyncEnumerable<QueryResult<RecordValue>> queryEnumerable){
Console.WriteLine(" Query results:");
await foreach (var result in queryEnumerable) {
foreach (var row in result.Rows)
{
Console.WriteLine();
Console.WriteLine(row.ToJsonString());
}
}
}
private const string string_func1 =@"SELECT substring(bag.baginfo.routing,0,3) AS Source FROM baggageInfo bag
WHERE ticketNo=1762376407826" ;
Console.WriteLine("\nUsing substring function!");
await fetchData(client,string_func1);
private const string string_func2 =@"SELECT fullname, length(fullname) AS fullname_length FROM BaggageInfo
WHERE ticketNo=1762320369957";
Console.WriteLine("\nUsing length function!");
await fetchData(client,string_func2);
private const string string_func3 =@"SELECT fullname FROM baggageInfo bag WHERE
EXISTS bag.bagInfo[contains($element.routing,""SFO"")]";
Console.WriteLine("\nUsing contains function!");
await fetchData(client,string_func3);