Zeichenfolgenfunktionen in Abfragen verwenden

Es gibt verschiedene integrierte Funktionen für Strings. In jeder Zeichenfolge beginnt die Position bei 0 und endet mit der Länge - 1.

Wenn Sie die Beispiele befolgen möchten, finden Sie weitere Informationen unter zum Anzeigen von Beispieldaten und zum Laden von Beispieldaten zum Testen. Die Skripte erstellen die in den Beispielen verwendeten Tabellen und laden Daten in die Tabellen.

Wenn Sie die Beispiele befolgen möchten, finden Sie unter Beispieldaten zum Ausführen von Abfragen Informationen zum Anzeigen von Beispieldaten und zum Erstellen der Beispieltabellen mit der OCI-Konsole und zum Laden von Daten mit JSON-Dateien.

Teilzeichenfolgenfunktion

Die Funktion substring extrahiert eine Zeichenfolge aus einer bestimmten Zeichenfolge entsprechend einer bestimmten numerischen Startposition und einer bestimmten numerischen Teilzeichenfolgenlä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"}

Concat-Funktion

Die Funktion concat verkettet alle 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"}

obere und untere Funktionen

upper und lower sind einfache Funktionen zur Konvertierung in Großbuchstaben bzw. Kleinbuchstaben. Mit der Funktion upper werden alle Zeichen in einer Zeichenfolge in Großbuchstaben konvertiert. Die Funktion lower konvertiert alle Zeichen in einer Zeichenfolge in Kleinschreibung.
returnvalue upper (source)
returnvalue lower (source) 

source ::= any* 
returnvalue ::= string
Beispiel 1: Rufen Sie den vollständigen Namen des Passagiers in Großbuchstaben mit der Ticketnummer 1762376407826 ab.
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 mit der Ticketnummer 1762376407826 ab.
SELECT lower(fullname) AS fullname_lowercase
FROM BaggageInfo WHERE ticketNo=1762376407826
Ausgabe:
{"fullname_lowercase":"dierdre amador"}

Trim-Funktion

Mit der Funktion trim können Sie vor- und nachgestellte Zeichen (oder beide) aus einer Zeichenfolge entfernen. Mit der Funktion ltrim können Sie führende Zeichen aus einer Zeichenfolge kürzen. 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"}
Verwenden Sie die Funktion ltrim, um führende Leerzeichen zu entfernen:
SELECT ltrim(bag.baginfo[0].routing)
FROM BaggageInfo bag 
WHERE ticketNo=1762376407826
Ausgabe:
{"Column_1":"JFK/MAD"}
Mit der Funktion rtrim nachgestellte Leerzeichen entfernen:
SELECT rtrim(bag.baginfo[0].routing)
FROM BaggageInfo bag 
WHERE ticketNo=1762376407826
Ausgabe:
{"Column_1":"JFK/MAD"}

Length-Funktion

Die Funktion length 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}

enthält Funktion

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 Zeitpunkt des Eincheckens bis zum Zeitpunkt des Scannens der Tasche 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 verfügt jede flightLeg über ein Aktionsarray. Das Aktionsarray enthält drei verschiedene Aktionen. Der Aktionscode für das erste Element im Array ist "Einchecken/Entladen". Für die erste Teilstrecke ist der Aktionscode "Checkin" und für die anderen Teilstrecken der Aktionscode "Offload at the hop". Der Aktionscode für das zweite Element des Arrays lautet 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 mit dem Ziel JTR.
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 beim 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_string nicht in der Quelle vorhanden ist.
  • Gibt 0 für einen beliebigen Quellwert zurück, wenn search_string die 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_position keine Ganzzahl ist.
Beispiel 1: Legen Sie fest, an welcher Position "-" in der geschätzten Ankunftszeit der ersten Fahrstrecke 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 Passagier mit der Ticketnummer 1762320569757 zu finden ist. 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}

Funktion ersetzen

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 vom 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 möglicherweise 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

Rückwärtsfunktion

Die Funktion reverse gibt die Zeichen der Quellzeichenfolge in umgekehrter Reihenfolge zurück, wobei die Zeichenfolge beginnend mit dem letzten Zeichen zuerst geschrieben wird.
returnvalue reverse(source)

source ::= any*
returnvalue ::= string
Beispiel: Zeigen Sie den vollständigen Namen an, und stornieren Sie den vollständigen Namen des Passagiers mit der Ticketnummer 1762330498104.
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ählung 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);