Uso de funciones String 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 para ver un ejemplo de datos y utilizar los scripts para cargar datos de ejemplo para pruebas. Los scripts crean las tablas utilizadas en los ejemplos y cargan datos en las tablas.

Si desea seguir los ejemplos, consulte Datos de ejemplo para ejecutar consultas para ver datos de ejemplo y aprender a utilizar la consola de OCI para crear las 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"}

función concat

La función concat concatena todos sus argumentos y muestra la cadena concatenada como salida.
returnvalue concat (source,[source*])
source ::= any*
returnvalue ::= string
Ejemplo: muestre el enrutamiento de un cliente con un número de ticket concreto como "La ruta para passenger_name 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 para convertirlas 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 sea 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 de recorte

La función trim permite recortar los caracteres iniciales o finales (o ambos) de una cadena. La función ltrim permite recortar caracteres iniciales de una cadena. La función rtrim permite recortar 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 billete es 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 los 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 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: recupere 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 starts_with y ends_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 se 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 billete 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 los otros 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 BagTag Scan. En la consulta anterior, puede determinar la diferencia en el tiempo de acción entre el escaneo de etiquetas de bolsa y la hora de entrada. Utilice la función contains para filtrar la hora de acción solo si el código de acción es Protección o BagScan. Dado que solo el primer tramo de vuelo tiene detalles de check-in y exploración de bolsa, 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 una lista de pasajeros cuyo destino sea JTR.
SELECT fullname FROM baggageInfo $bagInfo 
WHERE ends_with($bagInfo.bagInfo[].routing, "JTR")
Salida:
{"fullname":"Lucinda Beckman"}
{"fullname":"Gerard Greene"}
{"fullname":"Michelle Payne"}

Función index_of

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_string no está presente en el origen.
  • Devuelve 0 para cualquier valor de origen si search_string tiene una longitud de 0.
  • Devuelve NULL si algún argumento es NULL.
  • Devuelve NULL si algún argumento es una secuencia vacía o una secuencia con más de un elemento.
  • Devuelve un error si el argumento start_position no 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 billete 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}

reemplazar función

La función replace devuelve el origen con cada incidencia de 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 con 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 usar la función de reemplazo para cambiar la comilla doble a una sola comilla.
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 comenzando por el último carácter en primer lugar.
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 que utilizan 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 elemento enumerable asíncrono resultante.

Descargue el código completo SQLFunctions.cs de 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);