Utilizzo delle funzioni stringa nelle query

Ci sono varie funzioni incorporate sulle stringhe. In qualsiasi stringa, la posizione inizia da 0 e termina con una lunghezza pari a - 1.

Se si desidera seguire gli esempi, vedere per visualizzare i dati di esempio e utilizzare gli script per caricare i dati di esempio per i test. Gli script creano le tabelle utilizzate negli esempi e caricano i dati nelle tabelle.

Se si desidera seguire gli esempi, vedere Dati di esempio per eseguire query per visualizzare dati di esempio e imparare a utilizzare OCI Console per creare le tabelle di esempio e caricare i dati utilizzando i file JSON.

funzione di sottostringa

La funzione substring estrae una stringa da una determinata stringa in base a una determinata posizione iniziale numerica e a una determinata lunghezza di sottostringa numerica.
returnvalue substring (source, position [, substring_length] )

source ::= any*
position ::= integer*
substring_length ::= integer*
returnvalue ::= string
Esempio: recuperare i primi tre caratteri dai dettagli di instradamento di un passeggero con numero di biglietto 1762376407826.
SELECT substring(bag.baginfo.routing,0,3) AS Source 
FROM baggageInfo bag 
WHERE ticketNo=1762376407826
Output:
{"Source":"JFK"}

funzione concat

La funzione concat concatena tutti i relativi argomenti e visualizza la stringa concatenata come output.
returnvalue concat (source,[source*])
source ::= any*
returnvalue ::= string
Esempio: visualizzare l'instradamento di un cliente con un numero di ticket specifico come "L'instradamento per passenger_name è ...".
SELECT concat("The route for passenger ",fullName , " is ", bag.baginfo[0].routing)
FROM baggageInfo bag 
WHERE ticketNo=1762376407826
Output:
{"Column_1":"The route for passenger Dierdre Amador is JFK/MAD"}

funzioni superiori e inferiori

Le funzioni upper e lower sono semplici da convertire in lettere maiuscole o minuscole. La funzione upper converte in maiuscolo tutti i caratteri di una stringa. La funzione lower converte in minuscolo tutti i caratteri di una stringa.
returnvalue upper (source)
returnvalue lower (source) 

source ::= any* 
returnvalue ::= string
Esempio 1: recuperare il nome completo del passeggero in maiuscolo il cui numero di biglietto è 1762376407826.
SELECT upper(fullname) AS FULLNAME_CAPITALS 
FROM BaggageInfo 
WHERE ticketNo=1762376407826
Output:
{"FULLNAME_CAPITALS":"DIERDRE AMADOR"}
Esempio 2: recuperare il nome completo del passeggero in lettere minuscole il cui numero di biglietto è 1762376407826.
SELECT lower(fullname) AS fullname_lowercase
FROM BaggageInfo WHERE ticketNo=1762376407826
Output:
{"fullname_lowercase":"dierdre amador"}

funzione trim

La funzione trim consente di tagliare i caratteri iniziali o finali (o entrambi) da una stringa. La funzione ltrim consente di tagliare i caratteri iniziali da una stringa. La funzione rtrim consente di eliminare i caratteri finali da una stringa.
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
Esempio: rimuovere gli spazi vuoti iniziali e finali dai dettagli del percorso del passeggero il cui numero di biglietto è 1762350390409.
SELECT trim(bag.baginfo[0].routing,"trailing"," ")
FROM BaggageInfo bag 
WHERE ticketNo=1762376407826
Output:
{"Column_1":"JFK/MAD"}
Utilizzando la funzione ltrim per rimuovere gli spazi iniziali:
SELECT ltrim(bag.baginfo[0].routing)
FROM BaggageInfo bag 
WHERE ticketNo=1762376407826
Output:
{"Column_1":"JFK/MAD"}
Utilizzo della funzione rtrim per rimuovere gli spazi finali:
SELECT rtrim(bag.baginfo[0].routing)
FROM BaggageInfo bag 
WHERE ticketNo=1762376407826
Output:
{"Column_1":"JFK/MAD"}

funzione lunghezza

La funzione length restituisce la lunghezza di una stringa di caratteri. La funzione length calcola la lunghezza utilizzando il set di caratteri UTF.
returnvalue length(source)

source ::= any*
returnvalue ::= integer
Esempio: trovare la lunghezza del nome completo del passeggero il cui numero di biglietto è 1762350390409.
SELECT fullname, length(fullname) AS fullname_length 
FROM BaggageInfo
WHERE ticketNo=1762350390409
Output:
{"fullname":"Fallon Clements","fullname_length":15}

contiene la funzione

La funzione contains indica se una stringa di ricerca è presente o meno all'interno della stringa di origine.
returnvalue contains(source, search_string)

source ::= any*
search_string ::= any*
returnvalue ::= boolean
Esempio: recuperare i nomi completi dei passeggeri che hanno "SFO" nel percorso.
SELECT fullname FROM baggageInfo bag 
WHERE EXISTS bag.bagInfo[contains($element.routing,"SFO")]
Output:
{"fullname":"Michelle Payne"}
{"fullname":"Lucinda Beckman"}
{"fullname":"Henry Jenkins"}
{"fullname":"Lorenzo Phil"}
{"fullname":"Gerard Greene"}

Funzioni starts_with e ends_with

La funzione starts_with indica se la stringa di origine inizia o meno con la stringa di ricerca.
returnvalue starts_with(source, search_string)

source ::= any*
search_string ::= any*
returnvalue ::= boolean
La funzione ends_with indica se la stringa di origine termina con la stringa di ricerca.
returnvalue ends_with(source, search_string)

source ::= any*
search_string ::= any*
returnvalue ::= boolean
Esempio: quanto tempo è necessario dal momento del check-in al momento della scansione del sacchetto nel punto di imbarco per il passeggero con numero di biglietto 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)

Spiegazione: nei dati relativi ai bagagli, ogni flightLeg dispone di un array di azioni. Nell'array delle azioni sono presenti tre azioni diverse. Il codice azione per il primo elemento dell'array è Check-in/Offload. Per la prima tappa, il codice azione è Checkin e per le altre tappe, il codice azione è Offload al hop. Il codice azione per il secondo elemento dell'array è BagTag Scan. Nella query precedente è possibile determinare la differenza di tempo di azione tra la scansione dei tag bag e l'ora di check-in. La funzione contains consente di filtrare l'ora dell'azione solo se il codice dell'azione è Check-in o BagScan. Poiché solo la prima tappa di volo dispone di dettagli per il check-in e la scansione dei bagagli, è inoltre possibile filtrare i dati utilizzando la funzione starts_with per recuperare solo il codice sorgente fltRouteSrc.

Output:
{"flightNo":"BM572","checkinTime":"2019-03-02T03:28:00Z",
"bagScanTime":"2019-03-02T04:52:00Z","diff":-5040000}
Esempio 2: trovare l'elenco dei passeggeri la cui destinazione è JTR.
SELECT fullname FROM baggageInfo $bagInfo 
WHERE ends_with($bagInfo.bagInfo[].routing, "JTR")
Output:
{"fullname":"Lucinda Beckman"}
{"fullname":"Gerard Greene"}
{"fullname":"Michelle Payne"}

Funzione index_of

La funzione index_of determina la posizione del primo carattere della stringa di ricerca alla sua prima occorrenza, se presente.
returnvalue index_of(source, search_string [, start_position])

source ::= any*
search_string ::= any*
start_position ::= integer*
returnvalue ::= integer
Vari valori di ritorno:
  • Restituisce la posizione del primo carattere della stringa di ricerca alla prima occorrenza. La posizione è relativa alla posizione iniziale della stringa (che è zero).
  • Restituisce -1 se search_string non è presente nell'origine.
  • Restituisce 0 per qualsiasi valore di origine se search_string è di lunghezza 0.
  • Restituisce NULL se un qualsiasi argomento è NULL.
  • Restituisce NULL se un argomento è una sequenza vuota o una sequenza con più elementi.
  • Restituisce un errore se l'argomento start_position non è un numero intero.
Esempio 1: determinare la posizione "-" nell'ora di arrivo stimata della prima tappa per il passeggero con numero di biglietto 1762320569757.
SELECT index_of(bag.baginfo.flightLegs[0].estimatedArrival,"-")
FROM BaggageInfo bag 
WHERE ticketNo=1762320569757
Output:
{"Column_1":4}
Esempio 2: determinare la posizione "/" nel ciclo della prima tappa per il passeggero con numero di biglietto 1762320569757. In questo modo sarà possibile determinare il numero di caratteri disponibili per il punto di origine del passeggero con numero di biglietto 1762320569757.
SELECT index_of(bag.baginfo.routing,"/") 
FROM BaggageInfo bag 
WHERE ticketNo=1762320569757
Output:
"Column_1":3}

sostituire la funzione

La funzione replace restituisce l'origine con tutte le ricorrenze della stringa di ricerca sostituita con la stringa di sostituzione.
returnvalue replace(source, search_string [, replacement_string])

source ::= any*
search_string ::= any*
replacement_string ::= any*
returnvalue ::= string
Esempio: sostituire l'ubicazione di origine del passeggero con il numero di biglietto 1762320569757 da SFO a SOF.
SELECT replace(bag.bagInfo[0].routing,"SFO","SOF") 
FROM baggageInfo bag
WHERE ticketNo=1762320569757
Output:
{"Column_1":"SOF/IST/ATH/JTR"}

Esempio 2: sostituire la virgoletta doppia nel nome del passeggero con un'unica virgoletta.

Se i dati possono contenere una virgoletta doppia nel nome del passeggero, è possibile utilizzare la funzione di sostituzione per modificare la virgoletta doppia in una virgoletta singola.
SELECT fullname, 
replace(fullname, "\"", "'") as new_fullname
FROM BaggageInfo bag

funzione inversa

La funzione reverse restituisce i caratteri della stringa di origine in ordine inverso, dove la stringa viene scritta a partire dall'ultimo carattere.
returnvalue reverse(source)

source ::= any*
returnvalue ::= string
Esempio: visualizzare il nome completo e invertire il nome completo del passeggero con numero di biglietto 1762330498104.
SELECT fullname, reverse(fullname) 
FROM baggageInfo
WHERE ticketNo=1762330498104
Output:
{"fullname":"Michelle Payne","Column_2":"enyaP ellehciM"}

Esempi di utilizzo dell'API QueryRequest

È possibile utilizzare l'API QueryRequest e applicare le funzioni SQL per recuperare i dati da una tabella NoSQL.

Per eseguire la query, utilizzare l'API NoSQLHandle.query().

Scarica il codice completo SQLFunctions.java dagli esempi qui.
 //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);

Per eseguire la query, utilizzare il metodo borneo.NoSQLHandle.query().

Scarica il codice completo SQLFunctions.py dagli esempi qui.
# 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)

Per eseguire una query, utilizzare la funzione Client.Query.

Scarica il codice completo SQLFunctions.go dagli esempi qui.
 //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)

Per eseguire una query, utilizzare il metodo query.

JavaScript: scarica il codice completo SQLFunctions.js dagli esempi qui.
  //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: scarica il codice completo SQLFunctions.ts dagli esempi qui.
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);

Per eseguire una query, è possibile chiamare il metodo QueryAsync o chiamare il metodo GetQueryAsyncEnumerable e ripetere l'iterazione sull'enumerabile asincrono risultante.

Scarica il codice completo SQLFunctions.cs dagli esempi qui.
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);