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.
Verwandte Themen
Teilzeichenfolgenfunktion
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
SELECT substring(bag.baginfo.routing,0,3) AS Source
FROM baggageInfo bag
WHERE ticketNo=1762376407826
{"Source":"JFK"}
Concat-Funktion
concat
verkettet alle Argumente und zeigt die verkettete Zeichenfolge als Ausgabe an.returnvalue concat (source,[source*])
source ::= any*
returnvalue ::= string
SELECT concat("The route for passenger ",fullName , " is ", bag.baginfo[0].routing)
FROM baggageInfo bag
WHERE ticketNo=1762376407826
{"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
SELECT upper(fullname) AS FULLNAME_CAPITALS
FROM BaggageInfo
WHERE ticketNo=1762376407826
{"FULLNAME_CAPITALS":"DIERDRE AMADOR"}
SELECT lower(fullname) AS fullname_lowercase
FROM BaggageInfo WHERE ticketNo=1762376407826
{"fullname_lowercase":"dierdre amador"}
Trim-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
SELECT trim(bag.baginfo[0].routing,"trailing"," ")
FROM BaggageInfo bag
WHERE ticketNo=1762376407826
{"Column_1":"JFK/MAD"}
ltrim
, um führende Leerzeichen zu entfernen:SELECT ltrim(bag.baginfo[0].routing)
FROM BaggageInfo bag
WHERE ticketNo=1762376407826
{"Column_1":"JFK/MAD"}
rtrim
nachgestellte Leerzeichen entfernen:SELECT rtrim(bag.baginfo[0].routing)
FROM BaggageInfo bag
WHERE ticketNo=1762376407826
{"Column_1":"JFK/MAD"}
Length-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
SELECT fullname, length(fullname) AS fullname_length
FROM BaggageInfo
WHERE ticketNo=1762350390409
{"fullname":"Fallon Clements","fullname_length":15}
enthält Funktion
contains
gibt an, ob eine Suchzeichenfolge in der Quellzeichenfolge vorhanden ist.returnvalue contains(source, search_string)
source ::= any*
search_string ::= any*
returnvalue ::= boolean
SELECT fullname FROM baggageInfo bag
WHERE EXISTS bag.bagInfo[contains($element.routing,"SFO")]
{"fullname":"Michelle Payne"}
{"fullname":"Lucinda Beckman"}
{"fullname":"Henry Jenkins"}
{"fullname":"Lorenzo Phil"}
{"fullname":"Gerard Greene"}
Funktionen starts_with und ends_with
starts_with
gibt an, ob die Quellzeichenfolge mit der Suchzeichenfolge beginnt.returnvalue starts_with(source, search_string)
source ::= any*
search_string ::= any*
returnvalue ::= boolean
ends_with
gibt an, ob die Quellzeichenfolge mit der Suchzeichenfolge endet.returnvalue ends_with(source, search_string)
source ::= any*
search_string ::= any*
returnvalue ::= boolean
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.
{"flightNo":"BM572","checkinTime":"2019-03-02T03:28:00Z",
"bagScanTime":"2019-03-02T04:52:00Z","diff":-5040000}
SELECT fullname FROM baggageInfo $bagInfo
WHERE ends_with($bagInfo.bagInfo[].routing, "JTR")
{"fullname":"Lucinda Beckman"}
{"fullname":"Gerard Greene"}
{"fullname":"Michelle Payne"}
Funktion index_of
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
- 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.
SELECT index_of(bag.baginfo.flightLegs[0].estimatedArrival,"-")
FROM BaggageInfo bag
WHERE ticketNo=1762320569757
{"Column_1":4}
SELECT index_of(bag.baginfo.routing,"/")
FROM BaggageInfo bag
WHERE ticketNo=1762320569757
"Column_1":3}
Funktion ersetzen
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
SELECT replace(bag.bagInfo[0].routing,"SFO","SOF")
FROM baggageInfo bag
WHERE ticketNo=1762320569757
{"Column_1":"SOF/IST/ATH/JTR"}
Beispiel 2: Ersetzen Sie das doppelte Anführungszeichen im Passagiernamen durch ein einfaches Anführungszeichen.
SELECT fullname,
replace(fullname, "\"", "'") as new_fullname
FROM BaggageInfo bag
Rückwärtsfunktion
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
SELECT fullname, reverse(fullname)
FROM baggageInfo
WHERE ticketNo=1762330498104
{"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.
//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()
.
# 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
.
//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
.
//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);
}
}
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.
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);
Zeichenfolgenfunktionen in Abfragen verwenden