Utilizzo delle funzioni stringa nelle query
Ci sono varie funzioni integrate sulle stringhe. In qualsiasi stringa, la posizione inizia da 0 e termina alla lunghezza - 1.
Se si desidera seguire gli esempi, vedere Dati di esempio per eseguire le query 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 le 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 sottostringa
La funzione substring estrae una stringa da una determinata stringa in base a una determinata posizione iniziale numerica e a una determinata lunghezza della 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 gli 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 biglietto specifico come "L'instradamento per il nome del passeggero è …".
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 superiore e inferiore
Le funzioni upper e lower sono semplici da convertire rispettivamente in lettere maiuscole o minuscole. La funzione upper converte tutti i caratteri di una stringa in maiuscoli. La funzione lower converte tutti i caratteri di una stringa in minuscoli.
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 minuscolo 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 con numero di biglietto 1762350390409.
SELECT trim(bag.baginfo[0].routing,"trailing"," ")
FROM BaggageInfo bag
WHERE ticketNo=1762376407826
Output:
{"Column_1":"JFK/MAD"}
Utilizzo della 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 una funzione
La funzione contains indica se è presente o meno una stringa di ricerca 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" sulla loro rotta.
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"}
start_with e ends_with funzioni
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 occorre dal momento del check-in al momento della scansione del bagaglio 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 del bagaglio, ogni flightLeg dispone di un array di azioni. Nell'array di azioni sono disponibili tre azioni diverse. Il codice azione per il primo elemento dell'array è Check-in/Offload. Per la prima gamba, il codice azione è Check-in e per le altre gambe, il codice azione è Offload all'hop. Il codice azione per il secondo elemento dell'array è BagTag Scan. Nella query precedente, si determina la differenza di tempo di azione tra la scansione dei tag bag e il tempo di check-in. Utilizzare la funzione contains per filtrare il tempo di azione solo se il codice azione è Check-in o BagScan. Dal momento che solo la prima tappa di volo ha i dettagli del check-in e della scansione delle borse, è 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 ricorrenza, se presente.
returnvalue index_of(source, search_string [, start_position])
source ::= any*
search_string ::= any*
start_position ::= integer*
returnvalue ::= integer
Vari valori restituiti:
-
Restituisce la posizione del primo carattere della stringa di ricerca alla sua prima ricorrenza. La posizione è relativa alla posizione iniziale della stringa (che è zero).
-
Restituisce -1 se
search_stringnon è presente nell'origine. -
Restituisce 0 per qualsiasi valore di origine se la lunghezza di
search_stringè 0. -
Restituisce NULL se un argomento è NULL.
-
Restituisce NULL se un argomento è una sequenza vuota o una sequenza con più elementi.
-
Restituisce un errore se l'argomento
start_positionnon è un numero intero.
Esempio 1: determinare in quale posizione si trova "-" nell'orario di arrivo stimato 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 in quale posizione si trova "/" nell'instradamento della prima tappa per il passeggero con numero di biglietto 1762320569757. Ciò consente di determinare il numero di caratteri disponibili per il punto di origine del passeggero con il numero di biglietto 1762320569757.
SELECT index_of(bag.baginfo.routing,"/")
FROM BaggageInfo bag
WHERE ticketNo=1762320569757
Output:
"Column_1":3}
funzione di sostituzione
La funzione replace restituisce l'origine con ogni ricorrenza della stringa di ricerca sostituita dalla stringa di sostituzione.
returnvalue replace(source, search_string [, replacement_string])
source ::= any*
search_string ::= any*
replacement_string ::= any*
returnvalue ::= string
Esempio:sostituire la posizione 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 le virgolette doppie nel nome del passeggero con un unico preventivo.
Se i dati potrebbero contenere una virgoletta doppia nel nome del passeggero, è possibile utilizzare la funzione di sostituzione per modificare la virgoletta doppia in un singolo preventivo.
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 annullare 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 che utilizzano l'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'enumerazione asincrona 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);