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:

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);

Verwandte Themen