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.