DB2 - Banco de dados - Instruções e Funções Básicas - Funções escalares do SQL


Volta a página anterior

Volta ao Menu Principal


Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

Funções escalares do SQL

Três tipos de funções escalares do SQL são funções de data/hora, funções de conversão e funções de cadeia.

Funções de data/horário

Funções de data/hora calcular ou alterar os seguintes itens:

  • DATE, TIME, TIMESTAMP e TIMESTAMP_TZ alteram o tipo de dados de seu argumento para o tipo de dados especificado pela função.
  • CHAR altera o tipo de dados de seu argumento (um valor DATA ou HORA) para o tipo de dados CHAR.
  • DAYS calcula o número de dias entre uma data e outra.
  • YEAR, MONTH, DAY, HOUR, MINUTE, SECOND e MICROSECOND selecionam partes dos valores DATE, TIME, TIMESTAMP ou TIMESTAMP WITH TIME ZONE.

Cada função de data/horário é seguida de um argumento que é colocado entre parênteses.
O exemplo a seguir lista, por número, cada projeto que está planejado para começar em 1998 aplicando a função YEAR à coluna STARTD da tabela Q.PROJECT.

Esta consulta:

   SELECT PROJNO
   ,      STARTD
   ,      ENDD
   ,      TIMESTAMP
   FROM   Q.PROJECT
   WHERE  YEAR(STARTD) = 1998

Produz este relatório:

   PROJNO   STARTD      ENDD        TIMESTAMP
   ------   ----------  ----------  --------------------------
     1409   1998-06-15  1999-12-31  1996-03-13-09.12.57.149572
     1410   1998-09-29  2000-03-31  1996-03-13-12.18.23.402917

Funções de data/hora (consulte a tabela a seguir) podem ser usadas sempre que uma expressão puder ser usada.
O primeiro ou único argumento de cada uma dessas funções é uma expressão que transmite o valor a ser manipulado.

Tabela 1. Funções de data/horário

Função Argumento Resultado
DATA Data, registro de data e hora, registro de data e hora com fuso horário ou representação de cadeia de uma data Data
TIME Horário, registro de data e hora, registro de data e hora com fuso horário ou representação de cadeia de um horário Tempo
TIMESTAMP

Registro de data e hora, registro de data e hora com fuso horário, representação de cadeia de um registro de data e hora ou registro de data e hora com fuso horário, ou uma data (ou representação de cadeia de uma data) e um horário (ou representação de cadeia de um horário)

Timestamp
TIMESTAMP_TZ

Registro de data e hora ou registro de data e hora com fuso horário, representação de cadeia de um registro de data e hora ou registro de data e hora com fuso horário, ou uma data (ou representação de cadeia de uma data) e um horário (ou representação de cadeia de um horário)

Timestamp
DAY, MONTH ou YEAR

Data, registro de data e hora, registro de data e hora com fuso horário ou uma duração de data

Parte do dia, mês ou ano
HOUR, MINUTE ou SECOND

Horário, registro de data e hora, registro de data e hora com fuso horário ou uma duração de tempo

Parte da hora, do minuto ou do segundo
MICROSECOND

Registro de data e hora ou registro de data e hora com fuso horário

Segundos fracionais

DAYS

Data, registro de data e hora, registro de data e hora com fuso horário ou uma representação de cadeia de uma data

Dias desde 1 de janeiro de 0001
CHAR Data ou horário e o formato de saída de data/hora especificado

Representação em cadeia no formato de data/hora especificado.
Por padrão, ou se o parâmetro de programa DSQSFISO estiver configurado como YES, e se o formato não estiver especificado, o formato ISO será retornado.
Se o parâmetro de programa DSQSFISO estiver configurado como NO, o resultado será retornado no formato especificado no módulo DSNHDECP.

Outras Funções de Conversão

Funções escalares (consulte a tabela a seguir) permitem a conversão de um valor de um tipo de dados para outro.

Tabela 2. Funções de conversão

Função e sintaxe Argumento Resultado

BIGINT(V)

V = Uma expressão numérica ou uma expressão de cadeia

Uma grande-representação inteira de V ou uma representação em cadeia of V

BINARY(V, length)

V = Uma expressão de cadeia

length = um inteiro que especifica o comprimento da cadeia resultante

Uma cadeia binária de comprimento-fixo

DECFLOAT(V,P)

V = Uma expressão numérica ou uma expressão de cadeia

P = Dígitos de precisão do resultado (16 ou 34; o padrão é 34)

Uma representação de vírgula flutuante decimal de um número ou uma representação de cadeia de um número
DECIMAL(V,P,S)

V = Um número

P = Precisão do resultado, na faixa de 1 a 31

S = Escala do resultado

Representação decimal de V
DIGITS(argumento) Um inteiro ou número decimal binário Uma sequência de caracteres que representa os dígitos do argumento
FLOAT(argumento) Um número Número de ponto flutuante que representa o argumento
HEX(argumento) Qualquer tipo de dados diferente de uma cadeia de caracteres longa ou uma cadeia gráfica longa Uma sequência de caracteres que representa os dígitos hexadecimais reais do argumento
INTEGER(argumento) Um número na faixa dos inteiros binários Representação em palavra inteira do argumento

VARBINARY(V, length)

V = Uma expressão de cadeia

length = inteiro que especifica o comprimento da cadeia resultante

Uma cadeia binária de comprimento-variada
VARGRAPHIC(argumento) Cadeia de caracteres curta Cadeia gráfica que é a representação em DBCS do argumento

A consulta a seguir produz resultados para algumas das funções explicadas na tabela anterior.

Esta consulta:

   SELECT SALARY                  --SALARY
   ,      DECIMAL(SALARY,9,3)     --COL1
   ,      DIGITS(SALARY)          --COL2
   ,      FLOAT(SALARY)           --COL3
   ,      HEX(NAME)               --COL4
   ,      FLOAT(YEARS)            --COL5
   FROM   Q.STAFF
   WHERE  DEPT = 10

Produz este relatório:

    SALARY          COL1 COL2             COL3  COL4               COL5      
----------  ------------  -------  ----------  ------------------  ----------
  22959.20     22959.200  2295920   2.296E+04  D4D6D3C9D5C1D9C5    7.000E+00    
  20010.00     20010.000  2001000   2.001E+04  D3E4                1.000E+01    
  19260.25     19260.250  1926025   1.926E+04  C4C1D5C9C5D3E2      5.000E+00    
  21234.00     21234.000  2123400   2.123E+04  D1D6D5C5E2          1.200E+01 

Funções de Cadeia

As funções que são mostradas na tabela a seguir permitem a manipulação e a recuperação dos segmentos em cadeia.

Tabela 3. Funções de Cadeia

Função e sintaxe Argumento Resultado
LENGTH(argumento) Qualquer tipo de dados Número inteiro representa o comprimento do argumento
SUBSTR(S,N,L)

S: Cadeia de caracteres ou gráficos a ser avaliada.

N: Binário inteiro; representa a posição inicial da subcadeia em S.

L: Binário inteiro; representa o comprimento da subcadeia.

Subcadeia de S
VALOR(arg1, arg2...) Os argumentos devem ter tipos de dados compatíveis. O primeiro valor não nulo dos argumentos fornecidos.

A função LENGTH retornará o comprimento variável real dos dados se o tipo de dados for VARCHAR e retornará o comprimento fixo se o tipo de dados for CHAR.

A função VALUE obtém dois ou mais argumentos e retorna o primeiro argumento na série que seja resolvida como um valor não nulo.
Por exemplo, a instrução a seguir recupera a comissão de cada funcionário, consultando a coluna COMM de Q.STAFF.
Se a coluna COMM contiver um valor nulo para alguma linha, o resultado dessa linha será "0", o segundo argumento da função VALUE.

   SELECT VALUE(COMM,0) 
   FROM   Q.STAFF 

O primeiro ou único argumento de cada uma dessas funções é uma expressão que transmite o valor a ser manipulado ou recuperado.
Para LENGTH, o valor dessa expressão pode ser qualquer tipo de dados. Para VALUE, dois ou mais valores devem ser especificados, e seus tipos de dados devem ser compatíveis.
Por exemplo, você não pode especificar uma sequência INTEGER para o primeiro argumento e uma sequência CHARACTER para o segundo argumento em uma função VALUE.

Por exemplo, esta consulta encontra a primeira inicial e o sobrenome do candidato com o ID temporário número 400:

   SELECT SUBSTR(FIRSTNAME,1,1)||LASTNAME
   FROM   Q.INTERVIEW
   WHERE  TEMPID = 400


© Copyright IBM Corp.