Utiliser des fonctions String dans des 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 à Exemples de données pour exécuter des requêtes afin de visualiser un exemple de données et d'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 souhaitez 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.
fonction substring
La fonction substring extrait une chaîne d'une chaîne donnée en fonction d'une position de départ 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
Exemple : Extrayez les trois premiers caractères des détails d'acheminement d'un passager portant le numéro de ticket 1762376407826.
SELECT substring(bag.baginfo.routing,0,3) AS Source
FROM baggageInfo bag
WHERE ticketNo=1762376407826
Sortie :
{"Source":"JFK"}
fonction concaténée
La fonction concat concatène tous ses arguments et affiche la chaîne concaténée en sortie.
returnvalue concat (source,[source*])
source ::= any*
returnvalue ::= string
Exemple : affiche l'acheminement d'un client avec un numéro de ticket particulier comme suit : "L'itinéraire pour passager_name est …".
SELECT concat("The route for passenger ",fullName , " is ", bag.baginfo[0].routing)
FROM baggageInfo bag
WHERE ticketNo=1762376407826
Sortie :
{"Column_1":"The route for passenger Dierdre Amador is JFK/MAD"}
fonctions supérieures et inférieures
Les fonctions upper et lower sont des fonctions simples à convertir en majuscules ou minuscules respectivement. La fonction upper convertit tous les caractères d'une chaîne en majuscule. La fonctionlower convertit tous les caractères d'une chaîne en minuscule.
returnvalue upper (source)
returnvalue lower (source)
source ::= any*
returnvalue ::= string
Exemple 1 : Extrayez le nom complet du passager en majuscules dont le numéro de ticket est 1762376407826.
SELECT upper(fullname) AS FULLNAME_CAPITALS
FROM BaggageInfo
WHERE ticketNo=1762376407826
Sortie :
{"FULLNAME_CAPITALS":"DIERDRE AMADOR"}
Exemple 2 : Extrayez le nom complet du passager en minuscules dont le numéro de ticket est 1762376407826.
SELECT lower(fullname) AS fullname_lowercase
FROM BaggageInfo WHERE ticketNo=1762376407826
Sortie :
{"fullname_lowercase":"dierdre amador"}
fonction trim
La fonction trim vous permet d'ajuster les caractères de début ou de fin (ou les deux) d'une chaîne. La fonction ltrim vous permet d'éliminer les caractères de début d'une chaîne. La fonction rtrim vous permet de supprimer 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
Exemple : Supprimez les espaces de début et de fin des détails de l'itinéraire du passager dont le numéro de billet est 1762350390409.
SELECT trim(bag.baginfo[0].routing,"trailing"," ")
FROM BaggageInfo bag
WHERE ticketNo=1762376407826
Sortie :
{"Column_1":"JFK/MAD"}
Utilisation de la fonction ltrim pour supprimer les espaces de début :
SELECT ltrim(bag.baginfo[0].routing)
FROM BaggageInfo bag
WHERE ticketNo=1762376407826
Sortie :
{"Column_1":"JFK/MAD"}
Utilisation de la fonction rtrim pour supprimer les espaces de fin :
SELECT rtrim(bag.baginfo[0].routing)
FROM BaggageInfo bag
WHERE ticketNo=1762376407826
Sortie :
{"Column_1":"JFK/MAD"}
fonction length
La 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
Exemple : recherchez la longueur du nom complet du passager dont le numéro de billet est 1762350390409.
SELECT fullname, length(fullname) AS fullname_length
FROM BaggageInfo
WHERE ticketNo=1762350390409
Sortie :
{"fullname":"Fallon Clements","fullname_length":15}
contient la fonction
La 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
Exemple : Extrayez les noms complets des passagers dont l'itinéraire comporte "SFO".
SELECT fullname FROM baggageInfo bag
WHERE EXISTS bag.bagInfo[contains($element.routing,"SFO")]
Sortie :
{"fullname":"Michelle Payne"}
{"fullname":"Lucinda Beckman"}
{"fullname":"Henry Jenkins"}
{"fullname":"Lorenzo Phil"}
{"fullname":"Gerard Greene"}
fonctions starts_with et ends_with
La fonction starts_with indique si la chaîne source commence par la chaîne de recherche.
returnvalue starts_with(source, search_string)
source ::= any*
search_string ::= any*
returnvalue ::= boolean
La fonction ends_withindique 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
Exemple : Combien de temps faut-il entre le moment de l'enregistrement et le moment où le sac est scanné au point d'embarquement pour le passager portant le numéro de billet 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)
Explication :Dans les données de bagages, chaque flightLeg dispose d'un tableau d'actions. Le tableau 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 Archiver et pour les autres jambes, le code d'action est Décharger au niveau du saut. Le code d'action du 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 l'analyse des étiquettes de poche et l'heure d'admission. La fonction contains permet de filtrer l'heure de l'action uniquement si le code d'action est Archiver ou Analyse de poche. Etant donné que seule la première portion de route comporte des détails d'enregistrement et de balayage de conteneur, vous pouvez également filtrer les données à l'aide de la fonction starts_with pour extraire uniquement le code source fltRouteSrc.
Sortie :
{"flightNo":"BM572","checkinTime":"2019-03-02T03:28:00Z",
"bagScanTime":"2019-03-02T04:52:00Z","diff":-5040000}
Exemple 2 : recherche la liste des passagers dont la destination est JTR.
SELECT fullname FROM baggageInfo $bagInfo
WHERE ends_with($bagInfo.bagInfo[].routing, "JTR")
Sortie :
{"fullname":"Lucinda Beckman"}
{"fullname":"Gerard Greene"}
{"fullname":"Michelle Payne"}
fonction index_of
La fonction 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
Différentes valeurs de retour :
-
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_stringn'est pas présent dans la source. -
Renvoie 0 pour toute valeur de source si
search_stringa une longueur de 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_positionn'est pas un entier.
Exemple 1 : Déterminez à quelle position "-" se trouve l'heure d'arrivée estimée de la première étape pour le passager avec le numéro de billet 1762320569757.
SELECT index_of(bag.baginfo.flightLegs[0].estimatedArrival,"-")
FROM BaggageInfo bag
WHERE ticketNo=1762320569757
Sortie :
{"Column_1":4}
Exemple 2 : Déterminez à quelle position "/" se trouve dans le routage de la première portion de route pour le passager portant le numéro de ticket 1762320569757. Cela vous aidera à déterminer le nombre de caractères disponibles pour le point source du passager avec le numéro de ticket 1762320569757.
SELECT index_of(bag.baginfo.routing,"/")
FROM BaggageInfo bag
WHERE ticketNo=1762320569757
Sortie :
"Column_1":3}
remplacer la fonction
La fonction replace renvoie la source avec chaque occurrence de la chaîne de recherche remplacée par la chaîne de remplacement.
returnvalue replace(source, search_string [, replacement_string])
source ::= any*
search_string ::= any*
replacement_string ::= any*
returnvalue ::= string
Exemple : remplacez l'emplacement source du passager par le numéro de ticket 1762320569757 de SFO à SOF.
SELECT replace(bag.bagInfo[0].routing,"SFO","SOF")
FROM baggageInfo bag
WHERE ticketNo=1762320569757
Sortie :
{"Column_1":"SOF/IST/ATH/JTR"}
Exemple 2 : Remplacez le guillemet double dans le nom du passager par un guillemet unique.
Si vos données peuvent contenir un guillemet double dans le nom du passager, vous pouvez utiliser la fonction de remplacement pour remplacer le guillemet double par un guillemet simple.
SELECT fullname,
replace(fullname, """, "'") as new_fullname
FROM BaggageInfo bag
fonction inverse
La fonction 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 en premier.
returnvalue reverse(source)
source ::= any*
returnvalue ::= string
Exemple : affichez le nom complet et inversez le nom complet du passager avec le numéro de ticket 1762330498104.
SELECT fullname, reverse(fullname)
FROM baggageInfo
WHERE ticketNo=1762330498104
Sortie :
{"fullname":"Michelle Payne","Column_2":"enyaP ellehciM"}
Exemples utilisant 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().
Téléchargez le code complet SQLFunctions.java à partir des exemples ici.
//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().
Téléchargez le code complet SQLFunctions.py à partir des exemples ici.
# 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.
Téléchargez le code complet SQLFunctions.go à partir des exemples ici.
//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.
JavaScript : téléchargez le code complet SQLFunctions.js à partir des exemples ici.
//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 : téléchargez le code complet SQLFunctions.ts à partir des exemples ici.
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 la méthode GetQueryAsyncEnumerable et itérer sur l'énumérable asynchrone obtenu.
Téléchargez le code complet SQLFunctions.cs à partir des exemples ici.
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);