Utiliser des fonctions String dans les requêtes
Il existe différentes fonctions intégrées sur les chaînes. Dans n'importe quelle chaîne, la position commence à 0 et se termine à la longueur - 1.
Si vous souhaitez suivre les exemples, reportez-vous à la section pour afficher un exemple de données et utiliser les scripts pour charger des exemples de données à des fins de test. Les scripts créent les tables utilisées dans les exemples et chargent les données dans les tables.
Si vous voulez suivre les exemples, reportez-vous à Exemples de données pour exécuter des requêtes afin de visualiser un exemple de données et d'apprendre à utiliser la console OCI pour créer les exemples de tables et charger des données à l'aide de fichiers JSON.
Rubriques connexes
fonction de sous-chaîne
substring
extrait une chaîne d'une chaîne donnée en fonction d'une position de début numérique donnée et d'une longueur de sous-chaîne numérique donnée.
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"}
fonction concat
concat
concatène tous ses arguments et affiche la chaîne concaténée en tant que sortie.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"}
fonctions supérieures et inférieures
upper
et lower
sont des fonctions simples à convertir en majuscules ou en minuscules, respectivement. La fonction upper
convertit tous les caractères d'une chaîne en majuscules. La fonctionlower
convertit tous les caractères d'une chaîne en minuscules.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"}
fonction trim
trim
vous permet de tronquer les caractères de début ou de fin (ou les deux) d'une chaîne. La fonction ltrim
permet de couper les caractères de début d'une chaîne. La fonction rtrim
permet de couper les caractères de fin d'une chaîne.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
pour enlever les espaces de début :SELECT ltrim(bag.baginfo[0].routing)
FROM BaggageInfo bag
WHERE ticketNo=1762376407826
{"Column_1":"JFK/MAD"}
rtrim
pour enlever les espaces de fin :SELECT rtrim(bag.baginfo[0].routing)
FROM BaggageInfo bag
WHERE ticketNo=1762376407826
{"Column_1":"JFK/MAD"}
length (fonction)
length
renvoie la longueur d'une chaîne de caractères. La fonction length calcule la longueur à l'aide du jeu de caractères UTF.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}
contient une fonction
contains
indique si une chaîne de recherche est présente dans la chaîne source.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"}
Fonctions starts_with et ends_with
starts_with
indique si la chaîne source commence ou non par la chaîne de recherche.returnvalue starts_with(source, search_string)
source ::= any*
search_string ::= any*
returnvalue ::= boolean
ends_with
indique si la chaîne source se termine par la chaîne de recherche.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)
Explication : dans les données des bagages, chaque élément flightLeg
possède un tableau d'actions. Le tableau d'actions comporte trois actions différentes. Le code d'action du premier élément du tableau est Checkin/Offload. Pour la première jambe, le code d'action est Checkin et pour les autres jambes, le code d'action est Offload at the hop. Le code d'action pour le deuxième élément du tableau est BagTag Scan. Dans la requête ci-dessus, vous déterminez la différence de temps d'action entre le scan de l'étiquette de poche et l'heure d'admission. Utilisez la fonction contains
pour filtrer l'heure de l'action uniquement si le code d'action est Réinsérer ou BagScan. Etant donné que seule la première étape de vol contient les détails de l'enregistrement d'arrivée et de l'analyse des bagages, vous filtrez également les données à l'aide de la fonction starts_with
pour extraire uniquement le code source fltRouteSrc
.
{"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"}
Fonction index_of
index_of
détermine la position du premier caractère de la chaîne de recherche à sa première occurrence, le cas échéant.returnvalue index_of(source, search_string [, start_position])
source ::= any*
search_string ::= any*
start_position ::= integer*
returnvalue ::= integer
- Renvoie la position du premier caractère de la chaîne de recherche à sa première occurrence. La position est relative à la position de début de la chaîne (qui est zéro).
- Renvoie -1 si
search_string
n'est pas présent dans la source. - Renvoie 0 pour toute valeur de source si
search_string
est de longueur 0. - Renvoie NULL si un argument est NULL.
- Renvoie NULL si un argument est une séquence vide ou une séquence comportant plusieurs éléments.
- Renvoie une erreur si l'argument
start_position
n'est pas un entier.
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}
remplacer la fonction
replace
renvoie la source, toutes les occurrences de la chaîne de recherche étant remplacées par la chaîne de remplacement.
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"}
Exemple 2 : Remplacez le guillemet double dans le nom du passager par un guillemet simple.
SELECT fullname,
replace(fullname, "\"", "'") as new_fullname
FROM BaggageInfo bag
fonction inverse
reverse
renvoie les caractères de la chaîne source dans l'ordre inverse, où la chaîne est écrite en commençant par le dernier caractère.returnvalue reverse(source)
source ::= any*
returnvalue ::= string
SELECT fullname, reverse(fullname)
FROM baggageInfo
WHERE ticketNo=1762330498104
{"fullname":"Michelle Payne","Column_2":"enyaP ellehciM"}
Exemples d'utilisation de l'API QueryRequest
Vous pouvez utiliser l'API QueryRequest
et appliquer des fonctions SQL pour extraire des données d'une table NoSQL.
Pour exécuter la requête, utilisez l'API NoSQLHandle.query()
.
//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);
Pour exécuter votre requête, utilisez la méthode 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)
Pour exécuter une requête, utilisez la fonction 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)
Pour exécuter une requête, utilisez la méthode 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);
Pour exécuter une requête, vous pouvez appeler la méthode QueryAsync
ou appeler la méthode GetQueryAsyncEnumerable
et effectuer une itération sur l'énumérable asynchrone résultant.
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);