Zeichenfolgenfunktionen in Abfragen verwenden
Es gibt verschiedene integrierte Funktionen für Zeichenfolgen. In einer beliebigen Zeichenfolge beginnt die Position bei 0 und endet bei der Länge - 1.
Wenn Sie zusammen mit den Beispielen folgen möchten, lesen Sie Beispieldaten zum Ausführen von Abfragen, um Beispieldaten anzuzeigen und die Skripte zum Laden von Beispieldaten zum Testen zu verwenden. Die Skripte erstellen die in den Beispielen verwendeten Tabellen und laden Daten in die Tabellen.
Wenn Sie zusammen mit den Beispielen folgen möchten, lesen Sie Beispieldaten zum Ausführen von Abfragen, um Beispieldaten anzuzeigen. Außerdem erfahren Sie, wie Sie mit der OCI-Konsole die Beispieltabellen erstellen und Daten mit JSON-Dateien laden.
Funktion substring
Die Funktion substring extrahiert eine Zeichenfolge aus einer bestimmten Zeichenfolge entsprechend einer bestimmten numerischen Startposition und einer bestimmten numerischen Teilzeichenfolgelänge.
returnvalue substring (source, position [, substring_length] )
source ::= any*
position ::= integer*
substring_length ::= integer*
returnvalue ::= string
Beispiel: Rufen Sie die ersten drei Zeichen aus den Routingdetails eines Passagiers mit der Ticketnummer 1762376407826 ab.
SELECT substring(bag.baginfo.routing,0,3) AS Source
FROM baggageInfo bag
WHERE ticketNo=1762376407826
Ausgabe:
{"Source":"JFK"}
Funktion concat
Die Funktion concat verkettet alle zugehörigen Argumente und zeigt die verkettete Zeichenfolge als Ausgabe an.
returnvalue concat (source,[source*])
source ::= any*
returnvalue ::= string
Beispiel: Zeigen Sie die Weiterleitung eines Kunden mit einer bestimmten Ticketnummer als "Die Route für Passenger_Name ist …" an.
SELECT concat("The route for passenger ",fullName , " is ", bag.baginfo[0].routing)
FROM baggageInfo bag
WHERE ticketNo=1762376407826
Ausgabe:
{"Column_1":"The route for passenger Dierdre Amador is JFK/MAD"}
Funktionen upper und lower
upper und lower sind einfache Funktionen zur Konvertierung in Groß- bzw. Kleinschreibung. Die Funktion upper konvertiert alle Zeichen in einer Zeichenfolge zu Großbuchstaben. Die Funktion lower konvertiert alle Zeichen in einer Zeichenkette in Kleinbuchstaben.
returnvalue upper (source)
returnvalue lower (source)
source ::= any*
returnvalue ::= string
Beispiel 1: Rufen Sie den vollständigen Namen des Passagiers in Großbuchstaben ab, dessen Ticketnummer 1762376407826 lautet.
SELECT upper(fullname) AS FULLNAME_CAPITALS
FROM BaggageInfo
WHERE ticketNo=1762376407826
Ausgabe:
{"FULLNAME_CAPITALS":"DIERDRE AMADOR"}
Beispiel 2: Rufen Sie den vollständigen Namen des Passagiers in Kleinbuchstaben ab, dessen Ticketnummer 1762376407826 lautet.
SELECT lower(fullname) AS fullname_lowercase
FROM BaggageInfo WHERE ticketNo=1762376407826
Ausgabe:
{"fullname_lowercase":"dierdre amador"}
Funktion trim
Mit der Funktion trim können Sie führende oder nachgestellte Zeichen (oder beide) aus einer Zeichenfolge abschneiden. Mit der Funktion ltrim können Sie führende Zeichen aus einer Zeichenfolge abschneiden. Mit der Funktion rtrim können Sie nachgestellte Zeichen aus einer Zeichenfolge abschneiden.
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
Beispiel: Entfernen Sie vor- und nachgestellte Leerzeichen aus den Routendetails des Passagiers, dessen Ticketnummer 1762350390409 lautet.
SELECT trim(bag.baginfo[0].routing,"trailing"," ")
FROM BaggageInfo bag
WHERE ticketNo=1762376407826
Ausgabe:
{"Column_1":"JFK/MAD"}
Mit der Funktion ltrim werden führende Leerzeichen entfernt:
SELECT ltrim(bag.baginfo[0].routing)
FROM BaggageInfo bag
WHERE ticketNo=1762376407826
Ausgabe:
{"Column_1":"JFK/MAD"}
Verwenden der Funktion rtrim, um nachgestellte Leerzeichen zu entfernen:
SELECT rtrim(bag.baginfo[0].routing)
FROM BaggageInfo bag
WHERE ticketNo=1762376407826
Ausgabe:
{"Column_1":"JFK/MAD"}
Funktion length
Die length-Funktion gibt die Länge einer Zeichenfolge zurück. Die Längenfunktion berechnet die Länge mit dem UTF-Zeichensatz.
returnvalue length(source)
source ::= any*
returnvalue ::= integer
Beispiel:Suchen Sie die Länge des vollständigen Namens des Passagiers, dessen Ticketnummer 1762350390409 lautet.
SELECT fullname, length(fullname) AS fullname_length
FROM BaggageInfo
WHERE ticketNo=1762350390409
Ausgabe:
{"fullname":"Fallon Clements","fullname_length":15}
Funktion contains
Die Funktion contains gibt an, ob eine Suchzeichenfolge in der Quellzeichenfolge vorhanden ist.
returnvalue contains(source, search_string)
source ::= any*
search_string ::= any*
returnvalue ::= boolean
Beispiel: Rufen Sie die vollständigen Namen der Passagiere ab, die "SFO" auf ihrer Route haben.
SELECT fullname FROM baggageInfo bag
WHERE EXISTS bag.bagInfo[contains($element.routing,"SFO")]
Ausgabe:
{"fullname":"Michelle Payne"}
{"fullname":"Lucinda Beckman"}
{"fullname":"Henry Jenkins"}
{"fullname":"Lorenzo Phil"}
{"fullname":"Gerard Greene"}
Funktionen starts_with und ends_with
Die Funktion starts_with gibt an, ob die Quellzeichenfolge mit der Suchzeichenfolge beginnt.
returnvalue starts_with(source, search_string)
source ::= any*
search_string ::= any*
returnvalue ::= boolean
Die Funktion ends_with gibt an, ob die Quellzeichenfolge mit der Suchzeichenfolge endet.
returnvalue ends_with(source, search_string)
source ::= any*
search_string ::= any*
returnvalue ::= boolean
Beispiel:Wie lange dauert es vom Check-in bis zum Scannen des Beutels beim Einsteigen für den Passagier mit der Ticketnummer 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)
Erläuterung:In den Gepäckdaten enthält jede flightLeg ein Aktionsarray. Im Aktionsarray gibt es drei verschiedene Aktionen. Der Aktionscode für das erste Element im Array lautet "Einchecken/Ausladen". Bei der ersten Etappe ist der Aktionscode "Einchecken" und bei den anderen Beinen der Aktionscode "Ausladen am Hop". Der Aktionscode für das zweite Element des Arrays ist BagTag Scan. In der obigen Abfrage bestimmen Sie den Unterschied in der Aktionszeit zwischen dem Bag-Tag-Scan und der Eincheckzeit. Mit der Funktion contains können Sie die Aktionszeit nur filtern, wenn der Aktionscode "Einchecken" oder "BagScan" lautet. Da nur die erste Flugstrecke Details zum Check-in und Bag Scan enthält, filtern Sie die Daten zusätzlich mit der Funktion starts_with, um nur den Quellcode fltRouteSrc abzurufen.
Ausgabe:
{"flightNo":"BM572","checkinTime":"2019-03-02T03:28:00Z",
"bagScanTime":"2019-03-02T04:52:00Z","diff":-5040000}
Beispiel 2: Suchen Sie eine Liste der Passagiere, deren Ziel JTR lautet.
SELECT fullname FROM baggageInfo $bagInfo
WHERE ends_with($bagInfo.bagInfo[].routing, "JTR")
Ausgabe:
{"fullname":"Lucinda Beckman"}
{"fullname":"Gerard Greene"}
{"fullname":"Michelle Payne"}
Funktion index_of
Die Funktion index_of bestimmt die Position des ersten Zeichens der Suchzeichenfolge bei ihrem ersten Vorkommen, sofern vorhanden.
returnvalue index_of(source, search_string [, start_position])
source ::= any*
search_string ::= any*
start_position ::= integer*
returnvalue ::= integer
Verschiedene Rückgabewerte:
-
Gibt die Position des ersten Zeichens der Suchzeichenfolge beim ersten Vorkommen zurück. Die Position ist relativ zur Startposition der Zeichenfolge (die Null ist).
-
Gibt -1 zurück, wenn
search_stringnicht in der Quelle vorhanden ist. -
Gibt 0 für einen beliebigen Quellwert zurück, wenn
search_stringdie Länge 0 hat. -
Gibt NULL zurück, wenn ein Argument NULL ist.
-
Gibt NULL zurück, wenn ein Argument eine leere Sequenz oder eine Sequenz mit mehreren Elementen ist.
-
Gibt einen Fehler zurück, wenn das Argument
start_positionkeine Ganzzahl ist.
Beispiel 1: Bestimmen Sie, an welcher Position "-" in der voraussichtlichen Ankunftszeit der ersten Teilstrecke für den Passagier mit der Ticketnummer 1762320569757 gefunden wird.
SELECT index_of(bag.baginfo.flightLegs[0].estimatedArrival,"-")
FROM BaggageInfo bag
WHERE ticketNo=1762320569757
Ausgabe:
{"Column_1":4}
Beispiel 2: Bestimmen Sie, an welcher Position "/" im Routing der ersten Teilstrecke für den Passagier mit der Ticketnummer 1762320569757 gefunden wird. So können Sie bestimmen, wie viele Zeichen für den Quellpunkt des Passagiers mit der Ticketnummer 1762320569757 vorhanden sind.
SELECT index_of(bag.baginfo.routing,"/")
FROM BaggageInfo bag
WHERE ticketNo=1762320569757
Ausgabe:
"Column_1":3}
Ersetzungsfunktion
Die Funktion replace gibt die Quelle zurück, wobei jedes Vorkommen der Suchzeichenfolge durch die Ersatzzeichenfolge ersetzt wird.
returnvalue replace(source, search_string [, replacement_string])
source ::= any*
search_string ::= any*
replacement_string ::= any*
returnvalue ::= string
Beispiel: Ersetzen Sie den Ursprungsstandort des Passagiers durch die Ticketnummer 1762320569757 von SFO in SOF.
SELECT replace(bag.bagInfo[0].routing,"SFO","SOF")
FROM baggageInfo bag
WHERE ticketNo=1762320569757
Ausgabe:
{"Column_1":"SOF/IST/ATH/JTR"}
Beispiel 2: Ersetzen Sie das doppelte Anführungszeichen im Passagiernamen durch ein einfaches Anführungszeichen.
Wenn Ihre Daten ein doppeltes Anführungszeichen im Namen des Passagiers enthalten, können Sie die Funktion "Ersetzen" verwenden, um das doppelte Anführungszeichen in ein einfaches Anführungszeichen zu ändern.
SELECT fullname,
replace(fullname, """, "'") as new_fullname
FROM BaggageInfo bag
Funktion reverse
Die Funktion reverse gibt die Zeichen der Quellzeichenfolge in umgekehrter Reihenfolge zurück, wobei die Zeichenfolge zuerst mit dem letzten Zeichen geschrieben wird.
returnvalue reverse(source)
source ::= any*
returnvalue ::= string
Beispiel: Zeigen Sie den vollständigen Namen an, und kehren Sie den vollständigen Namen des Passagiers mit der Ticketnummer 1762330498104 zurück.
SELECT fullname, reverse(fullname)
FROM baggageInfo
WHERE ticketNo=1762330498104
Ausgabe:
{"fullname":"Michelle Payne","Column_2":"enyaP ellehciM"}
Beispiele für die Verwendung der QueryRequest-API
Sie können die QueryRequest-API verwenden und SQL-Funktionen anwenden, um Daten aus einer NoSQL-Tabelle abzurufen.
Zum Ausführen der Abfrage verwenden Sie die NoSQLHandle.query()-API.
Laden Sie den vollständigen Code SQLFunctions.java aus den Beispielen hier herunter.
//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);
Um die Abfrage auszuführen, verwenden Sie die Methode borneo.NoSQLHandle.query().
Laden Sie den vollständigen Code SQLFunctions.py aus den Beispielen hier herunter.
# 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)
Um eine Abfrage auszuführen, verwenden Sie die Funktion Client.Query.
Laden Sie den vollständigen Code SQLFunctions.go aus den Beispielen hier herunter.
//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)
Um eine Abfrage auszuführen, verwenden Sie die Methode query.
JavaScript: Laden Sie den vollständigen Code SQLFunctions.js aus den Beispielen hier herunter.
//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: Laden Sie den vollständigen Code SQLFunctions.ts aus den Beispielen hier herunter.
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);
Um eine Abfrage auszuführen, können Sie die Methode QueryAsync aufrufen oder die Methode GetQueryAsyncEnumerable aufrufen und über die resultierende asynchrone aufzählbare Methode iterieren.
Laden Sie den vollständigen Code SQLFunctions.cs aus den Beispielen hier herunter.
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);