Usando funções de Timestamp em consultas
Você pode executar várias operações aritméticas nos valores Timestamp e Duration.
Se você quiser acompanhar os exemplos, consulte Dados de amostra para executar consultas para exibir dados de amostra e usar os scripts para carregar dados de amostra para teste. Os scripts criam as tabelas usadas nos exemplos e carregam dados nas tabelas.
Se quiser acompanhar os exemplos, consulte Dados de amostra para executar consultas para exibir dados de amostra e aprender a usar a console do OCI para criar as tabelas de exemplo e carregar dados usando arquivos JSON.
Expressões de Extração
A expressão EXTRACT extrai um componente de um marcador de data/hora.
extract_expression ::= EXTRACT "(" id FROM expression ")"
A expressão depois da palavra-chave FROM deve retornar no máximo um carimbo de data/hora ou NULL. Se o resultado desta expressão for NULL ou vazio, o resultado de EXTRACT também será NULL ou vazio, respectivamente. Caso contrário, o componente especificado pelo id será retornado. Este ID deve ser uma das seguintes palavras-chave: ANO, MÊS, DIA, HORA, MINUTO, SEGUNDO, MILISECOND, MICROSECOND, NANOSECOND, SEMANA, ISOWEEK.
Exemplo 1: Qual é o nome completo e o ano de chegada da bagagem do cliente com o número do ticket 1762383911861.
SELECT fullName,
EXTRACT (YEAR FROM CAST (bag.bagInfo.bagArrivalDate AS Timestamp(0)))
AS YEAR FROM BaggageInfo bag
WHERE ticketNo=1762383911861
Explicação: primeiro use CAST para converter o bagArrivalDate em um TIMESTAMP e, em seguida, extraia o componente YEAR do TIMESTAMP.
Saída:
{"fullName":"Joanne Diaz","YEAR":2019}
Exemplo 2: Recuperar todas as malas que percorreram o MIA entre 10:00 e 10:00 em fevereiro de 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)
Explicação:Você quer saber os detalhes dos voos que percorreram o MIA entre as 10:00 e as 10:00 em fevereiro de 2019. Você usa várias condições de filtro aqui. Primeiro, o voo deveria ter se originado ou atravessado através do MIA. O ano de chegada deve ser 2019 e o mês de chegada deve ser 2 (fevereiro). Em seguida, filtre se a hora de chegada é entre 10:00 am e 10:00 pm (20 horas).
Saída:
{"tagNum":"17657806255240","fltRouteSrc":["MIA","LAX"],"HOUR":16}
{"tagNum":"17657806292518","fltRouteSrc":["MIA","LAX"],"HOUR":16}
Exemplo 3:Em que ano e mês o passageiro com o código de reserva PQ1M8N recebeu a bagagem?
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"
Explicação: primeiro use CAST para converter o bagArrivalDate em um TIMESTAMP e, em seguida, extraia o componente YEAR e o componente MONTH do TIMESTAMP.
Saída:
{"fullName":"Kendal Biddle","YEAR":2019,"MONTH":3}
Exemplo 4:Agrupe os dados de bagagem com base no mês de chegada e exiba o mês e o número de bagagem que chegou nesse mês.
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)))
Explicação: você deseja agrupar os dados com base no mês da chegada da bagagem. Você usa uma matriz de não aninhamento para nivelar os dados. O array bagInfo é nivelado e o valor da data de chegada do repositório é extraído do array. Em seguida, use CAST para converter o bagArrivalDate em um TIMESTAMP e, em seguida, extraia o componente YEAR e o componente MONTH do TIMESTAMP. Em seguida, use a função count para obter a bagagem total correspondente a cada mês.
Observação: uma suposição nos dados é que toda a bagagem chegou no mesmo ano. Portanto, você agrupa os dados apenas com base no mês.
Saída:
{"MONTH":2,"COUNT":11}
{"MONTH":3,"COUNT":10}
função timestamp_add()
Adiciona uma duração a um valor de timestamp e retorna o novo timestamp. A duração pode ser positiva ou negativa. O tipo de resultado é TIMESTAMP(9).
Sintaxe:
TIMESTAMP(9) timestamp_add(TIMESTAMP timestamp, STRING duration)
Semântica:
-
TIMESTAMP: Um valor de TIMESTAMP ou um valor que pode ser convertido em TIMESTAMP.
-
duration: Uma string com o formato
[-](<n> <UNIT>)+, em quené um número eUNITpode ser YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, MILLISECOND, NANOSECOND ou a forma plural dessas palavras-chave, como YEARS.
Observação: A palavra-chave UNIT não faz distinção entre maiúsculas e minúsculas.
- returnvalue: TIMESTAMP(9)
Exemplo 1:No aplicativo de companhia aérea, um buffer de cinco minutos de atraso é considerado "em dia". Imprima a hora estimada de chegada no primeiro trecho com um buffer de cinco minutos para o passageiro com o número de bilhete 1762399766476.
SELECT timestamp_add(bag.bagInfo.flightLegs[0].estimatedArrival, "5 minutes")
AS ARRIVAL_TIME FROM BaggageInfo bag
WHERE ticketNo=1762399766476
Explicação: no aplicativo de companhia aérea, um cliente pode ter qualquer número de trechos de voo, dependendo da origem e do destino. Na consulta acima, você está obtendo a chegada estimada na "primeira etapa" da viagem. Portanto, o primeiro registro do array flightsLeg é extraído e o tempo estimatedArrival é extraído do array e um buffer de "5 minutos" é adicionado a ele e exibido.
Saída:
{"ARRIVAL_TIME":"2019-02-03T06:05:00.000000000Z"}
Observação:
A coluna estimatedArrival é uma STRING. Se a coluna tiver valores STRING no formato ISO-8601, ela será automaticamente convertida pelo runtime SQL no tipo de dados TIMESTAMP.
A ISO8601 descreve uma maneira internacionalmente aceita de representar datas, horários e durações.
Sintaxe: Data com hora: AAAA-MM-DDThh:mm:ss[.s[s[s[s[s[s]]][Z|(+|-)hh:mm]
em que
- YYYY especifica o ano, como quatro dígitos decimais
- MM especifica o mês, como dois dígitos decimais, de 00 a 12
- DD especifica o dia, como dois dígitos decimais, de 00 a 31
- hh especifica a hora, como dois dígitos decimais, de 00 a 23
- mm especifica os minutos, como dois dígitos decimais, de 00 a 59
- ss[.s[s[s[s[s]]]]] especifica os segundos, como dois dígitos decimais, 00 a 59, opcionalmente seguido por um ponto decimal e 1 a 6 dígitos decimais (representando a parte fracionária de um segundo).
- Z especifica a hora UTC (fuso horário 0). (Também pode ser especificado por +00:00, mas não por -00:00.)
- (+|-)hh:mm especifica o fuso horário como diferença em relação ao UTC. (Uma das opções + ou - é obrigatória.)
Exemplo 1a:Imprima a hora estimada de chegada em cada trecho com um buffer de cinco minutos para o passageiro com o número de bilhete 1762399766476.
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
Explicação:Você deseja exibir o tempo estimatedArrival em cada trecho. O número de pernas pode ser diferente para cada cliente. Portanto, a referência de variável é usada na consulta acima e o array baggageInfo e o array flightLegs não são aninhados para executar a consulta.
Saída:
{"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"}
Exemplo 2: Quantas malas chegaram na última semana?
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")]
Explicação: você obtém uma contagem do número de malas processadas pela solicitação de companhia aérea na última semana. Um cliente pode ter mais de um repositório (ou seja, o array bagInfo pode ter mais de um registro). ObagArrivalDate deve ter um valor entre hoje e os últimos 7 dias. Para cada registro no array bagInfo, você determina se a hora de chegada da bolsa está entre a hora agora e uma semana atrás. A função current_time fornece a você o tempo agora. Uma condição EXISTS é usada como filtro para determinar se a bolsa tem uma data de chegada na última semana. A função count determina o número total de bolsas nesse período.
Saída:
{"COUNT_LASTWEEK":0}
Exemplo 3: Localize o número de malas que chegam nas próximas 6 horas.
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")]
Explicação: você obtém uma contagem do número de malas que serão processadas pela solicitação de companhia aérea nas próximas 6 horas. Um cliente pode ter mais de um repositório (ou seja, o array bagInfo pode ter mais de um registro). O bagArrivalDate deve estar entre o horário atual e as próximas 6 horas. Para cada registro no array bagInfo, você determina se a hora de chegada da bolsa está entre a hora agora e seis horas depois. A função current_time fornece a você o tempo agora. Uma condição EXISTS é usada como filtro para determinar se a bolsa tem uma data de chegada nas próximas seis horas. A função count determina o número total de bolsas nesse período.
Saída:
{"COUNT_NEXT6HOURS":0}
funções timestamp_diff() e get_duration()
timestamp_diff()
Retorna o número de milissegundos entre dois valores de timestamp. O tipo de resultado é LONG.
Sintaxe:
LONG timestamp_diff(TIMESTAMP timestamp1, TIMESTAMP
timestamp2)
Semântica:
-
timestamp1: Um valor de TIMESTAMP ou um valor que pode ser convertido em TIMESTAMP
-
timestamp2: Um valor de TIMESTAMP ou um valor que pode ser convertido em TIMESTAMP
-
valor de retorno:LONG
obter_duração()
Converte o número fornecido de milissegundos em uma string de duração. O tipo de resultado é STRING.
Sintaxe:
STRING get_duration(LONG duration_millis)
Semântica:
-
duration_millis: a duração em milissegundos
-
returnvalue: STRING. O formato de string de duração retornado é
[-](<n> <UNIT>)+, em queUNITpode ser DAY, HOUR, MINUTE, SECOND e MILLISECOND, por exemplo, "1 dia 2 horas" ou "-10 minutos 0 segundo 500 milissegundos".
Exemplos:
Exemplo 1: Qual é a duração entre o momento em que a bagagem foi embarcada em um trecho e chegou ao próximo trecho para o passageiro com o número de passagem 1762355527825?
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
Explicação: em um aplicativo de companhia aérea, cada cliente pode ter um número diferente de saltos/pernas entre sua origem e destino. Nesta consulta, você determina o tempo necessário entre cada trecho de voo. Isto é determinado pela diferença entre bagArrivalDate e flightDate para cada trecho de voo. Para determinar a duração em dias, horas ou minutos, informe o resultado da função timestamp_diff para a função get_duration.
Saída:
{"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"}
Para determinar a duração em milissegundos, use apenas a função 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
Exemplo 2:Quanto tempo leva desde o momento do check-in até o momento em que a mala é escaneada no ponto de embarque para o passageiro com o número do bilhete 176234463813?
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)
Explicação: Nos dados de bagagem, cada flightLeg tem um array de ações. Há três ações diferentes no array de ações. O código de ação do primeiro elemento no array é Check-in/Descarregamento. Para o primeiro trecho, o código de ação é Check-in e para os outros trechos, o código de ação é Offload no hop. O código de ação para o segundo elemento do array é BagTag Scan. Na consulta acima, você determina a diferença no tempo de ação entre a verificação da tag de bolsa e o tempo de check-in. Use a função contains para filtrar o horário da ação somente se o código da ação for Check-in ou BagScan. Como apenas o primeiro trecho de voo tem detalhes de check-in e varredura de bolsa, você também filtra os dados usando a função starts_with para buscar apenas o código-fonte fltRouteSrc. Para determinar a duração em dias, horas ou minutos, informe o resultado da função timestamp_diff para a função get_duration.
Para determinar a duração em milissegundos, use apenas a função 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)
Saída:
{"flightNo":"BM572","checkinTime":"2019-03-02T03:28:00Z",
"bagScanTime":"2019-03-02T04:52:00Z","diff":"- 1 hour 24 minutes"}
Exemplo 3: Quanto tempo leva para as malas de um cliente com o tíquete nº 1762320369957 chegarem ao primeiro ponto de trânsito?
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
Explicação: em um aplicativo de companhia aérea, cada cliente pode ter um número diferente de saltos/pernas entre sua origem e destino. No exemplo acima, você determina o tempo necessário para a bolsa chegar ao primeiro ponto de trânsito. Nos dados de bagagem, o flightLeg é uma matriz. O primeiro registro no array se refere aos primeiros detalhes do ponto de trânsito. O flightDate no primeiro registro é o horário em que o saco sai da origem e o estimatedArrival no primeiro registro de trecho de voo indica o horário em que atinge o primeiro ponto de trânsito. A diferença entre os dois dá o tempo necessário para que o saco atinja o primeiro ponto de trânsito. Para determinar a duração em dias, horas ou minutos, informe o resultado da função timestamp_diff para a função get_duration.
Para determinar a duração em milissegundos, use a função 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
Saída:
{"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"}
Exemplos de uso da API QueryRequest
Você pode usar a API QueryRequest e aplicar funções SQL para extrair dados de uma tabela NoSQL.
Para executar sua consulta, use a API NoSQLHandle.query().
Faça download do código completo SQLFunctions.java pelos exemplos aqui.
//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);
Para executar sua consulta, use o método borneo.NoSQLHandle.query().
Faça download do código completo SQLFunctions.py nos exemplos aqui.
# 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)
Para executar uma consulta, use a função Client.Query.
Faça download do código completo SQLFunctions.go nos exemplos aqui.
//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)
Para executar uma consulta, use o método query.
JavaScript: Faça download do código completo SQLFunctions.js dos exemplos aqui.
//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: Faça download do código completo SQLFunctions.ts dos exemplos aqui.
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);
Para executar uma consulta, você pode chamar o método QueryAsync ou chamar o método GetQueryAsyncEnumerable e iterar sobre o enumerável assíncrono resultante.
Faça download do código completo SQLFunctions.cs nos exemplos aqui.
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);