Utilisation de fonctions Timestamp dans les requêtes
Vous pouvez effectuer diverses opérations arithmétiques sur les valeurs d'horodatage et de durée.
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
Extraire les expressions
extract_expression ::= EXTRACT "(" id FROM expression ")"
L'expression après le mot-clé FROM doit renvoyer au plus un horodatage ou NULL. Si le résultat de cette expression est NULL ou vide, le résultat de EXTRACT est également NULL ou vide, respectivement. Sinon, le composant spécifié par l'ID est renvoyé. Cet ID doit être l'un des mots-clés suivants : YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, MILLISECOND, MICROSECOND, NANOSECOND, WEEK, ISOWEEK.
SELECT fullName,
EXTRACT (YEAR FROM CAST (bag.bagInfo.bagArrivalDate AS Timestamp(0)))
AS YEAR FROM BaggageInfo bag
WHERE ticketNo=1762383911861
Explication : Vous utilisez d'abord CAST pour convertir bagArrivalDate
en TIMESTAMP, puis vous extrayez le composant YEAR de l'horodatage.
{"fullName":"Joanne Diaz","YEAR":2019}
SELECT bag.bagInfo[].tagNum,bag.bagInfo[].flightLegs[].fltRouteSrc,
$t1 AS HOUR FROM BaggageInfo bag,
EXTRACT(HOUR FROM CAST (bag.bagInfo[0].bagArrivalDate AS Timestamp(0))) $t1,
EXTRACT(YEAR FROM CAST (bag.bagInfo[0].bagArrivalDate AS Timestamp(0))) $t2,
EXTRACT(MONTH FROM CAST (bag.bagInfo[0].bagArrivalDate AS Timestamp(0))) $t3
WHERE bag.bagInfo[].flightLegs[].fltRouteSrc=any "MIA" AND
$t2=2019 AND $t3=02 AND ($t1>10 AND $t1<20)
Explication : Vous voulez connaître les détails des vols qui ont voyagé à travers MIA entre 10h00 et 10h00 en février 2019. Vous utilisez ici un certain nombre de conditions de filtre. Tout d'abord, le vol aurait dû provenir ou traverser MIA. L'année d'arrivée doit être 2019 et le mois d'arrivée doit être 2 (février). Ensuite, vous filtrez si l'heure d'arrivée est comprise entre 10h00 et 10h00 (20 heures).
{"tagNum":"17657806255240","fltRouteSrc":["MIA","LAX"],"HOUR":16}
{"tagNum":"17657806292518","fltRouteSrc":["MIA","LAX"],"HOUR":16}
SELECT fullName,
EXTRACT(YEAR FROM CAST (bag.bagInfo.bagArrivalDate AS Timestamp(0))) AS YEAR,
EXTRACT(MONTH FROM CAST (bag.bagInfo.bagArrivalDate AS Timestamp(0))) AS MONTH
FROM BaggageInfo bag WHERE bag.confNo="PQ1M8N"
Explication : Vous utilisez d'abord CAST pour convertir bagArrivalDate
en TIMESTAMP, puis vous extrayez le composant YEAR et le composant MONTH à partir de l'horodatage.
{"fullName":"Kendal Biddle","YEAR":2019,"MONTH":3}
SELECT EXTRACT(MONTH FROM CAST ($bag_arr_date AS Timestamp(0))) AS MONTH,
count(EXTRACT(MONTH FROM CAST ($bag_arr_date AS Timestamp(0)))) AS COUNT
FROM BaggageInfo $bag, $bag.bagInfo[].bagArrivalDate $bag_arr_date
GROUP BY EXTRACT(MONTH FROM CAST ($bag_arr_date AS Timestamp(0)))
bagInfo
est mis à plat et la valeur de la date d'arrivée du conteneur est extraite du tableau. Utilisez ensuite CAST pour convertir bagArrivalDate
en TIMESTAMP, puis extrayez les composants YEAR et MONTH à partir de l'horodatage. Vous utilisez ensuite la fonction count
pour obtenir le total des bagages correspondant à chaque mois.
Remarques :
Une hypothèse dans les données est que tous les bagages sont arrivés la même année. Vous regroupez donc les données uniquement en fonction du mois.{"MONTH":2,"COUNT":11}
{"MONTH":3,"COUNT":10}
Fonction timestamp_add()
Ajoute une durée à une valeur d'horodatage et renvoie le nouvel horodatage. Cette durée peut être positive ou négative. Le type de résultat est TIMESTAMP(9)
.
TIMESTAMP(9) timestamp_add(TIMESTAMP timestamp, STRING duration)
- timestamp : valeur TIMESTAMP ou une valeur qui peut être convertie en TIMESTAMP.
- duration : chaîne au format [-](<n> <UNIT>)+, où 'n' est un nombre et <UNIT> peut être YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, MILLISECOND, NANOSECOND ou la forme plurielle de ces mots-clés (par exemple, YEARS).
Remarques :
Le mot-clé UNIT n'est pas sensible à la casse. - returnvalue : TIMESTAMP(9)
SELECT timestamp_add(bag.bagInfo.flightLegs[0].estimatedArrival, "5 minutes")
AS ARRIVAL_TIME FROM BaggageInfo bag
WHERE ticketNo=1762399766476
Explication : Dans l'application de la compagnie aérienne, un client peut avoir n'importe quel nombre de vols en fonction de la source et de la destination. Dans la requête ci-dessus, vous récupérez l'arrivée estimée dans la "première étape" du voyage. Le premier enregistrement du tableau flightsLeg
est donc extrait, l'heure estimatedArrival
est extraite du tableau et un tampon de 5 minutes est ajouté à celui-ci et affiché.
{"ARRIVAL_TIME":"2019-02-03T06:05:00.000000000Z"}
Remarques :
La colonne estimatedArrival
est STRING. Si la colonne contient des valeurs STRING au format ISO-8601, elle sera automatiquement convertie par l'exécution SQL en type de données TIMESTAMP.
ISO8601 décrit un moyen internationalement accepté de représenter des dates, des heures et des durées.
Syntax: Date with time: YYYY-MM-DDThh:mm:ss[.s[s[s[s[s[s]]]]][Z|(+|-)hh:mm]
- YYYY spécifie l'année sous forme de quatre chiffres décimaux
- MM spécifie le mois, sous forme de deux chiffres décimaux, de 00 à 12
- DD spécifie le jour, sous forme de deux chiffres décimaux, de 00 à 31
- hh spécifie l'heure, sous forme de deux décimales, 00 à 23
- mm spécifie les minutes, sous forme de deux chiffres décimaux, de 00 à 59
- ss[.s[s[s[s[s]]]]] spécifie les secondes, sous la forme de deux chiffres décimaux, de 00 à 59, éventuellement suivis d'une virgule et de 1 à 6 chiffres décimaux (représentant la partie fractionnaire d'une seconde).
- Z indique l'heure UTC (fuseau horaire 0). (Il peut également être spécifié par +00:00, mais pas par -00:00.)
- (+|-)hh:mm spécifie le fuseau horaire comme différence par rapport à UTC. (L'une des valeurs + ou - est requise.)
SELECT $s.ticketno, $value as estimate,
timestamp_add($value, '5 minute') AS add5min
FROM baggageinfo $s,
$s.bagInfo.flightLegs.estimatedArrival as $value
WHERE ticketNo=1762399766476
Explication : vous souhaitez afficher l'heure estimatedArrival
sur chaque portion de route. Le nombre de jambes peut être différent pour chaque client. La référence de variable est donc utilisée dans la requête ci-dessus et le tableau baggageInfo
et le tableau flightLegs
ne sont pas imbriqués pour exécuter la requête.
{"ticketno":1762399766476,"estimate":"2019-02-03T06:00:00Z",
"add5min":"2019-02-03T06:05:00.000000000Z"}
{"ticketno":1762399766476,"estimate":"2019-02-03T08:22:00Z",
"add5min":"2019-02-03T08:27:00.000000000Z"}
SELECT count(*) AS COUNT_LASTWEEK FROM baggageInfo bag
WHERE EXISTS bag.bagInfo[$element.bagArrivalDate < current_time()
AND $element.bagArrivalDate > timestamp_add(current_time(), "-7 days")]
Explication : Vous obtenez le nombre de sacs traités par l'application de la compagnie aérienne au cours de la dernière semaine. Un client peut avoir plusieurs sacs (c'est-à-dire que le tableau bagInfo
peut avoir plusieurs enregistrements). La valeur de bagArrivalDate
doit être comprise entre aujourd'hui et les 7 derniers jours. Pour chaque enregistrement du tableau bagInfo
, vous déterminez si l'heure d'arrivée du conteneur est comprise entre l'heure actuelle et l'heure d'il y a une semaine. La fonction current_time
vous donne le temps maintenant. Une condition EXISTS est utilisée comme filtre pour déterminer si la poche a une date d'arrivée dans la dernière semaine. La fonction count
détermine le nombre total de poches au cours de cette période.
{"COUNT_LASTWEEK":0}
SELECT count(*) AS COUNT_NEXT6HOURS FROM baggageInfo bag
WHERE EXISTS bag.bagInfo[$element.bagArrivalDate > current_time()
AND $element.bagArrivalDate < timestamp_add(current_time(), "6 hours")]
Explication : Vous obtenez le nombre de sacs qui seront traités par l'application de la compagnie aérienne dans les 6 prochaines heures. Un client peut avoir plusieurs sacs (c'est-à-dire qu'un tableau bagInfo
peut avoir plusieurs enregistrements). La valeur bagArrivalDate
doit être comprise entre l'heure actuelle et les 6 prochaines heures. Pour chaque enregistrement du tableau bagInfo
, vous déterminez si l'heure d'arrivée du conteneur est comprise entre le moment présent et six heures plus tard. La fonction current_time
vous donne le temps maintenant. Une condition EXISTS est utilisée comme filtre pour déterminer si la poche a une date d'arrivée dans les six prochaines heures. La fonction count
détermine le nombre total de poches au cours de cette période.
{"COUNT_NEXT6HOURS":0}
Fonctions timestamp_diff() et get_duration()
timestamp_diff()
Renvoie le nombre de millisecondes entre deux valeurs d'horodatage. Le type de résultat est LONG
.
LONG timestamp_diff(TIMESTAMP timestamp1, TIMESTAMP
timestamp2)
- timestamp1 : valeur TIMESTAMP ou une valeur pouvant être convertie en TIMESTAMP
- timestamp2 : valeur TIMESTAMP ou une valeur pouvant être convertie en TIMESTAMP
- returnvalue : LONG
get_duration()
Convertit le nombre donné de millisecondes en chaîne de durée. Le type de résultat est STRING
.
STRING get_duration(LONG duration_millis)
- duration_millis : durée en millisecondes
- returnvalue : STRING. Le format de chaîne de durée renvoyé est [-](<n> <UNIT>)+, où <UNIT> peut être DAY, HOUR, MINUTE, SECOND et MILLISECOND, par exemple "1 jour 2 heures" ou "-10 minutes 0 seconde 500 millisecondes".
Exemples :
SELECT $s.ticketno, $bagInfo.bagArrivalDate, $flightLeg.flightDate,
get_duration(timestamp_diff($bagInfo.bagArrivalDate, $flightLeg.flightDate)) AS diff
FROM baggageinfo $s,
$s.bagInfo[] AS $bagInfo, $bagInfo.flightLegs[] AS $flightLeg
WHERE ticketNo=1762355527825
Explication : Dans une application de compagnie aérienne, chaque client peut avoir un nombre différent de sauts/jambes entre sa source et sa destination. Dans cette requête, vous déterminez le temps écoulé entre chaque étape de vol. Ceci est déterminé par la différence entre bagArrivalDate
et flightDate
pour chaque étape de vol. Pour déterminer la durée en jours, heures ou minutes, transmettez le résultat de la fonction timestamp_diff
à la fonction get_duration
.
{"bagArrivalDate":"2019-03-22T10:17:00Z","flightDate":"2019-03-22T07:00:00Z",
"diff":"3 hours 17 minutes"}
{"bagArrivalDate":"2019-03-22T10:17:00Z","flightDate":"2019-03-22T07:23:00Z",
"diff":"2 hours 54 minutes"}
{"bagArrivalDate":"2019-03-22T10:17:00Z","flightDate":"2019-03-22T08:23:00Z",
"diff":"1 hour 54 minutes"}
timestamp_diff
.SELECT $s.ticketno, $bagInfo.bagArrivalDate, $flightLeg.flightDate,
timestamp_diff($bagInfo.bagArrivalDate, $flightLeg.flightDate) AS diff
FROM baggageinfo $s,
$s.bagInfo[] AS $bagInfo,
$bagInfo.flightLegs[] AS $flightLeg
WHERE ticketNo=1762355527825
SELECT $flightLeg.flightNo,
$flightLeg.actions[contains($element.actionCode, "Checkin")].actionTime AS checkinTime,
$flightLeg.actions[contains($element.actionCode, "BagTag Scan")].actionTime AS bagScanTime,
get_duration(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
. Pour déterminer la durée en jours, heures ou minutes, transmettez le résultat de la fonction timestamp_diff
à la fonction get_duration
.
timestamp_diff
.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)
{"flightNo":"BM572","checkinTime":"2019-03-02T03:28:00Z",
"bagScanTime":"2019-03-02T04:52:00Z","diff":"- 1 hour 24 minutes"}
SELECT $bagInfo.flightLegs[1].actions[2].actionTime,
$bagInfo.flightLegs[0].actions[0].actionTime,
get_duration(timestamp_diff($bagInfo.flightLegs[1].actions[2].actionTime,
$bagInfo.flightLegs[0].actions[0].actionTime)) AS diff
FROM baggageinfo $s, $s.bagInfo[] AS $bagInfo
WHERE ticketNo=1762320369957
Explication : Dans une application de compagnie aérienne, chaque client peut avoir un nombre différent de sauts/jambes entre sa source et sa destination. Dans l'exemple ci-dessus, vous déterminez le temps nécessaire au sac pour atteindre le premier point de transit. Dans les données de bagages, flightLeg
est un tableau. Le premier enregistrement du tableau fait référence aux détails du premier point de transit. flightDate
dans le premier enregistrement correspond à l'heure à laquelle le conteneur quitte la source et estimatedArrival
dans le premier enregistrement de portion de vol indique l'heure à laquelle il atteint le premier point de transit. La différence entre les deux donne le temps nécessaire au sac pour atteindre le premier point de transit. Pour déterminer la durée en jours, heures ou minutes, transmettez le résultat de la fonction timestamp_diff
à la fonction get_duration
.
timestamp_diff
.
SELECT $bagInfo.flightLegs[0].flightDate,
$bagInfo.flightLegs[0].estimatedArrival,
timestamp_diff($bagInfo.flightLegs[0].estimatedArrival,
$bagInfo.flightLegs[0].flightDate) AS diff
FROM baggageinfo $s, $s.bagInfo[] AS $bagInfo
WHERE ticketNo=1762320369957
{"flightDate":"2019-03-12T03:00:00Z","estimatedArrival":"2019-03-12T16:00:00Z","diff":"13 hours"}
{"flightDate":"2019-03-12T03:00:00Z","estimatedArrival":"2019-03-12T16:40:00Z","diff":"13 hours 40 minutes"}
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 ts_func1="SELECT timestamp_add(bag.bagInfo.flightLegs[0].estimatedArrival, \"5 minutes\")"+
" AS ARRIVAL_TIME FROM BaggageInfo bag WHERE ticketNo=1762341772625";
System.out.println("Using timestamp_add function ");
fetchRows(handle,ts_func1);
String ts_func2="SELECT $s.ticketno, $bagInfo.bagArrivalDate, $flightLeg.flightDate, "+
"get_duration(timestamp_diff($bagInfo.bagArrivalDate, $flightLeg.flightDate)) AS diff "+
"FROM baggageinfo $s, $s.bagInfo[] AS $bagInfo, $bagInfo.flightLegs[] AS $flightLeg "+
"WHERE ticketNo=1762344493810";
System.out.println("Using get_duration and timestamp_diff function ");
fetchRows(handle,ts_func2);
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))
ts_func1 = '''SELECT timestamp_add(bag.bagInfo.flightLegs[0].estimatedArrival, "5 minutes")
AS ARRIVAL_TIME FROM BaggageInfo bag WHERE ticketNo=1762341772625'''
print('Using timestamp_add function:')
fetch_data(handle,ts_func1)
ts_func2 = '''SELECT $s.ticketno, $bagInfo.bagArrivalDate, $flightLeg.flightDate,
get_duration(timestamp_diff($bagInfo.bagArrivalDate, $flightLeg.flightDate)) AS diff
FROM baggageinfo $s,
$s.bagInfo[] AS $bagInfo, $bagInfo.flightLegs[] AS $flightLeg
WHERE ticketNo=1762344493810'''
print('Using get_duration and timestamp_diff function:')
fetch_data(handle,ts_func2)
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()))
}
}
ts_func1 := `SELECT timestamp_add(bag.bagInfo.flightLegs[0].estimatedArrival, "5 minutes")
AS ARRIVAL_TIME FROM BaggageInfo bag WHERE ticketNo=1762341772625`
fmt.Printf("Using timestamp_add function::\n")
fetchData(client, err,tableName,ts_func1)
ts_func2 := `SELECT $s.ticketno, $bagInfo.bagArrivalDate, $flightLeg.flightDate,
get_duration(timestamp_diff($bagInfo.bagArrivalDate, $flightLeg.flightDate)) AS diff
FROM baggageinfo $s,
$s.bagInfo[] AS $bagInfo, $bagInfo.flightLegs[] AS $flightLeg
WHERE ticketNo=1762344493810`
fmt.Printf("Using get_duration and timestamp_diff function:\n")
fetchData(client, err,tableName,ts_func2)
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: string) {
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 ts_func1 = `SELECT timestamp_add(bag.bagInfo.flightLegs[0].estimatedArrival, "5 minutes")
AS ARRIVAL_TIME FROM BaggageInfo bag WHERE ticketNo=1762341772625`
console.log("Using timestamp_add function:");
await fetchData(handle,ts_func1);
const ts_func2 = `SELECT $s.ticketno, $bagInfo.bagArrivalDate, $flightLeg.flightDate,
get_duration(timestamp_diff($bagInfo.bagArrivalDate, $flightLeg.flightDate)) AS diff
FROM baggageinfo $s,
$s.bagInfo[] AS $bagInfo, $bagInfo.flightLegs[] AS $flightLeg
WHERE ticketNo=1762344493810`
console.log("Using get_duration and timestamp_diff function:");
await fetchData(handle,ts_func2);
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 ts_func1 =@"SELECT timestamp_add(bag.bagInfo.flightLegs[0].estimatedArrival, ""5 minutes"")
AS ARRIVAL_TIME FROM BaggageInfo bag WHERE ticketNo=1762341772625";
Console.WriteLine("\nUsing timestamp_add function!");
await fetchData(client,ts_func1);
private const string ts_func2 =@"SELECT $s.ticketno, $bagInfo.bagArrivalDate, $flightLeg.flightDate,
get_duration(timestamp_diff($bagInfo.bagArrivalDate, $flightLeg.flightDate)) AS diff
FROM baggageinfo $s,
$s.bagInfo[] AS $bagInfo, $bagInfo.flightLegs[] AS $flightLeg
WHERE ticketNo=1762344493810";
Console.WriteLine("\nUsing get_duration and timestamp_diff function!");
await fetchData(client,ts_func2);