Usando funções String em consultas

Existem várias funções incorporadas em strings. Em qualquer string, a posição começa em 0 e termina em comprimento - 1.

Se quiser acompanhar os exemplos, consulte 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 seguir os exemplos, consulte Dados de amostra para executar consultas para exibir uma amostra de dados e aprender a usar a console do OCI para criar as tabelas de exemplo e carregar dados usando arquivos JSON.

Tópicos Relacionados

função de substring

A função substring extrai uma string de uma determinada string de acordo com uma determinada posição inicial numérica e um determinado tamanho de substring numérico.
returnvalue substring (source, position [, substring_length] )

source ::= any*
position ::= integer*
substring_length ::= integer*
returnvalue ::= string
Exemplo: Obter os três primeiros caracteres dos detalhes de roteamento de um passageiro com o número do ticket 1762376407826.
SELECT substring(bag.baginfo.routing,0,3) AS Source 
FROM baggageInfo bag 
WHERE ticketNo=1762376407826
Saída:
{"Source":"JFK"}

função concat

A função concat concatena todos os seus argumentos e exibe a string concatenada como saída.
returnvalue concat (source,[source*])
source ::= any*
returnvalue ::= string
Exemplo: exiba o roteamento de um cliente com um número de ticket específico como "A rota para passenger_name é ...".
SELECT concat("The route for passenger ",fullName , " is ", bag.baginfo[0].routing)
FROM baggageInfo bag 
WHERE ticketNo=1762376407826
Saída:
{"Column_1":"The route for passenger Dierdre Amador is JFK/MAD"}

funções superior e inferior

upper e lower são funções simples para conversão em letras maiúsculas ou minúsculas, respectivamente. A função upper converte todos os caracteres de uma string em maiúsculas. A função lower converte todos os caracteres em uma string em minúsculas.
returnvalue upper (source)
returnvalue lower (source) 

source ::= any* 
returnvalue ::= string
Exemplo 1: Extraia o nome completo do passageiro em letras maiúsculas cujo número do ticket é 1762376407826.
SELECT upper(fullname) AS FULLNAME_CAPITALS 
FROM BaggageInfo 
WHERE ticketNo=1762376407826
Saída:
{"FULLNAME_CAPITALS":"DIERDRE AMADOR"}
Exemplo 2: Obter o nome completo do passageiro em letras minúsculas cujo número do ticket seja 1762376407826.
SELECT lower(fullname) AS fullname_lowercase
FROM BaggageInfo WHERE ticketNo=1762376407826
Saída:
{"fullname_lowercase":"dierdre amador"}

função de redução

A função trim permite que você corte caracteres à frente ou atrás (ou ambos) de uma string. A função ltrim permite cortar caracteres à esquerda de uma string. A função rtrim permite cortar caracteres à direita de uma string.
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
Exemplo: Remova os espaços em branco à esquerda e à direita dos detalhes da rota do passageiro cujo número de ticket seja 1762350390409.
SELECT trim(bag.baginfo[0].routing,"trailing"," ")
FROM BaggageInfo bag 
WHERE ticketNo=1762376407826
Saída:
{"Column_1":"JFK/MAD"}
Usando a função ltrim para remover espaços à esquerda:
SELECT ltrim(bag.baginfo[0].routing)
FROM BaggageInfo bag 
WHERE ticketNo=1762376407826
Saída:
{"Column_1":"JFK/MAD"}
Usando a função rtrim para remover espaços finais:
SELECT rtrim(bag.baginfo[0].routing)
FROM BaggageInfo bag 
WHERE ticketNo=1762376407826
Saída:
{"Column_1":"JFK/MAD"}

função de tamanho

A função length retorna o tamanho de uma string de caracteres. A função length calcula o tamanho usando o conjunto de caracteres UTF.
returnvalue length(source)

source ::= any*
returnvalue ::= integer
Exemplo: Localize o tamanho do nome completo do passageiro cujo número do ticket é 1762350390409.
SELECT fullname, length(fullname) AS fullname_length 
FROM BaggageInfo
WHERE ticketNo=1762350390409
Saída:
{"fullname":"Fallon Clements","fullname_length":15}

contém função

A função contains indica se uma string de pesquisa está ou não presente dentro da string de origem.
returnvalue contains(source, search_string)

source ::= any*
search_string ::= any*
returnvalue ::= boolean
Exemplo: Obtenha os nomes completos dos passageiros que têm "SFO" em sua rota.
SELECT fullname FROM baggageInfo bag 
WHERE EXISTS bag.bagInfo[contains($element.routing,"SFO")]
Saída:
{"fullname":"Michelle Payne"}
{"fullname":"Lucinda Beckman"}
{"fullname":"Henry Jenkins"}
{"fullname":"Lorenzo Phil"}
{"fullname":"Gerard Greene"}

Funções starts_with e ends_with

A função starts_with indica se a string de origem começa ou não com a string de pesquisa.
returnvalue starts_with(source, search_string)

source ::= any*
search_string ::= any*
returnvalue ::= boolean
A função ends_with indica se a string de origem termina com a string de pesquisa.
returnvalue ends_with(source, search_string)

source ::= any*
search_string ::= any*
returnvalue ::= boolean
Exemplo: Quanto tempo leva desde o momento do check-in até o momento em que a bolsa é digitalizada no ponto de embarque do passageiro com o número do ticket 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)

Explicação: Nos dados da bagagem, cada flightLeg tem um array de ações. Existem três ações diferentes na matriz de ações. O código de ação do primeiro elemento da matriz é Check-in/Descarregamento. Para a primeira perna, o código de ação é Check-in e para as outras pernas, o código de ação é Offload no hop. O código de ação do 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 do repositório e o horário de check-in. Use a função contains para filtrar o tempo de ação somente se o código de ação for Check-in ou BagScan. Como apenas a primeira etapa do voo tem detalhes de check-in e verificação de bagagem, você também filtra os dados usando a função starts_with para extrair apenas o código-fonte fltRouteSrc.

Saída:
{"flightNo":"BM572","checkinTime":"2019-03-02T03:28:00Z",
"bagScanTime":"2019-03-02T04:52:00Z","diff":-5040000}
Exemplo 2: Localize a lista de passageiros cujo destino é JTR.
SELECT fullname FROM baggageInfo $bagInfo 
WHERE ends_with($bagInfo.bagInfo[].routing, "JTR")
Saída:
{"fullname":"Lucinda Beckman"}
{"fullname":"Gerard Greene"}
{"fullname":"Michelle Payne"}

Função index_of

A função index_of determina a posição do primeiro caractere da string de pesquisa em sua primeira ocorrência, se houver.
returnvalue index_of(source, search_string [, start_position])

source ::= any*
search_string ::= any*
start_position ::= integer*
returnvalue ::= integer
Vários valores de retorno:
  • Retorna a posição do primeiro caractere da string de pesquisa em sua primeira ocorrência. A posição é relativa à posição inicial da string (que é zero).
  • Retorna -1 se search_string não estiver presente na origem.
  • Retorna 0 para qualquer valor de origem se search_string tiver o tamanho 0.
  • Retorna NULL se qualquer argumento for NULL.
  • Retorna NULL se qualquer argumento for uma sequência vazia ou uma sequência com mais de um item.
  • Retorna um erro se o argumento start_position não for um número inteiro.
Exemplo 1: Determine em qual posição "-" é encontrada a hora de chegada estimada do primeiro trecho para o passageiro com o número de ticket 1762320569757.
SELECT index_of(bag.baginfo.flightLegs[0].estimatedArrival,"-")
FROM BaggageInfo bag 
WHERE ticketNo=1762320569757
Saída:
{"Column_1":4}
Exemplo 2: Determine em qual posição "/" é encontrada no roteamento do primeiro trecho do passageiro com o número do ticket 1762320569757. Isso ajudará você a determinar quantos caracteres existem para o ponto de origem do passageiro com o número do ticket 1762320569757.
SELECT index_of(bag.baginfo.routing,"/") 
FROM BaggageInfo bag 
WHERE ticketNo=1762320569757
Saída:
"Column_1":3}

substituir função

A função replace retorna a origem com cada ocorrência da string de pesquisa substituída pela string substituta.
returnvalue replace(source, search_string [, replacement_string])

source ::= any*
search_string ::= any*
replacement_string ::= any*
returnvalue ::= string
Exemplo: Substitua o local de origem do passageiro pelo número do ticket 1762320569757 de SFO para SOF.
SELECT replace(bag.bagInfo[0].routing,"SFO","SOF") 
FROM baggageInfo bag
WHERE ticketNo=1762320569757
Saída:
{"Column_1":"SOF/IST/ATH/JTR"}

Exemplo 2: Substitua aspas duplas no nome do passageiro por aspas simples.

Se seus dados puderem conter aspas duplas no nome do passageiro, você poderá usar a função de substituição para alterar aspas duplas para aspas simples.
SELECT fullname, 
replace(fullname, "\"", "'") as new_fullname
FROM BaggageInfo bag

função de reversão

A função reverse retorna os caracteres da string de origem na ordem inversa, em que a string é gravada começando com o último caractere primeiro.
returnvalue reverse(source)

source ::= any*
returnvalue ::= string
Exemplo: exiba o nome completo e inverta o nome completo do passageiro com o número do ticket 1762330498104.
SELECT fullname, reverse(fullname) 
FROM baggageInfo
WHERE ticketNo=1762330498104
Saída:
{"fullname":"Michelle Payne","Column_2":"enyaP ellehciM"}

Exemplos usando a 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 nos 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 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);

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))  

 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)

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()))
   }
} 
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)

Para executar uma consulta, use o método query.

JavaScript: Faça download do código completo SQLFunctions.js nos 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 nos 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: 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);

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 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);