MySQL Funções: String, Numérica, Definida pelo Usuário, Armazenada
O que são funções?
MySQL pode fazer muito mais do que apenas armazenar e recuperar dados. Nós também podemos realizar manipulações nos dados antes de recuperá-lo ou salvá-lo. Isso e onde MySQL Funções entram. Funções são simplesmente pedaços de código que realizam algumas operações e então retornam um resultado. Algumas funções aceitam parâmetros enquanto outras funções não aceitam parâmetros.
Vejamos brevemente um exemplo de MySQL função. Por padrão, MySQL salva tipos de dados de data no formato “AAAA-MM-DD”. Suponha que construímos uma aplicação e nossos usuários desejam que a data seja retornada no formato “DD-MM-AAAA”, podemos usar MySQL função incorporada DATE_FORMAT para conseguir isso. DATE_FORMAT é uma das funções mais utilizadas em MySQL. Analisaremos isso com mais detalhes à medida que desenvolvermos a lição.
Por que usar funções?
Com base no exemplo dado na introdução, pessoas com experiência em programação de computadores podem estar pensando “Por que se preocupar MySQL Funções? O mesmo efeito pode ser alcançado com linguagem de script/programação?” É verdade que podemos conseguir isso escrevendo alguns procedimentos/funções no programa aplicativo.
Voltando ao nosso exemplo DATE na introdução, para que nossos usuários obtenham os dados no formato desejado, a camada de negócios terá que fazer o processamento necessário.
Isso se torna um problema quando a aplicação precisa ser integrada a outros sistemas. Quando usamos MySQL funções como DATE_FORMAT, então podemos ter essa funcionalidade incorporada ao banco de dados e qualquer aplicativo que precise dos dados os obtém no formato necessário. Esse reduz o retrabalho na lógica de negócios e reduz inconsistências de dados.
Outra razão pela qual devemos considerar o uso MySQL funções é o fato de que pode ajudar a reduzir o tráfego de rede em aplicações cliente/servidor. A camada de negócios precisará apenas fazer chamadas para as funções armazenadas sem a necessidade de manipular os dados. Em média, o uso de funções pode ajudar a melhorar muito o desempenho geral do sistema.
Tipos de funções
Funções integradas
MySQL vem com uma série de funções integradas. Funções integradas são simplesmente funções já implementadas no MySQL servidor. Essas funções nos permitem executar diferentes tipos de manipulações nos dados. As funções internas podem ser basicamente categorizadas nas seguintes categorias mais usadas.
- Funções de strings – operar em tipos de dados string
- Funções numéricas – operar em tipos de dados numéricos
- Funções de data – operar em tipos de dados de data
- Funções agregadas – operar em todos os tipos de dados acima e produzir conjuntos de resultados resumidos.
- Outras funções - MySQL também suporta outros tipos de funções integradas, mas limitaremos nossa lição apenas às funções mencionadas acima.
Vejamos agora em detalhes cada uma das funções mencionadas acima. Estaremos explicando as funções mais utilizadas usando nosso “Myflixdb”.
Funções de string
Já vimos o que as funções de string fazem. Veremos um exemplo prático que os utiliza. Em nossa tabela de filmes, os títulos dos filmes são armazenados usando combinações de letras maiúsculas e minúsculas. Suponha que queiramos obter uma lista de consulta que retorne os títulos dos filmes em letras maiúsculas. Podemos usar a função “UCASE” para fazer isso. Ele pega uma string como parâmetro e converte todas as letras em maiúsculas. O script mostrado abaixo demonstra o uso da função “UCASE”.
SELECT `movie_id`,`title`, UCASE(`title`) FROM `movies`;
AQUI
- UCASE(`title`) é a função integrada que recebe o título como parâmetro e o retorna em letras maiúsculas com o nome alternativo `upper_case_title`.
Executando o script acima em MySQL workbench contra o Myflixdb nos dá os seguintes resultados mostrados abaixo.
movie_id | title | UCASE('title') |
---|---|---|
16 | 67% Guilty | 67% GUILTY |
6 | Angels and Demons | ANGELS AND DEMONS |
4 | Code Name Black | CODE NAME BLACK |
5 | Daddy's Little Girls | DADDY'S LITTLE GIRLS |
7 | Davinci Code | DAVINCI CODE |
2 | Forgetting Sarah Marshal | FORGETTING SARAH MARSHAL |
9 | Honey mooners | HONEY MOONERS |
19 | movie 3 | MOVIE 3 |
1 | Pirates of the Caribean 4 | PIRATES OF THE CARIBEAN 4 |
18 | sample movie | SAMPLE MOVIE |
17 | The Great Dictator | THE GREAT DICTATOR |
3 | X-Men | X-MEN |
MySQL suporta uma série de funções de string. Para obter uma lista completa de todas as funções de string integradas, consulte este link http://dev.mysql.com/doc/refman/5.0/en/string-functions.html on MySQL .
Funções numéricas
Conforme mencionado anteriormente, essas funções operam em tipos de dados numéricos. Podemos realizar cálculos matemáticos em dados numéricos nas instruções SQL.
Operadores aritméticos
MySQL suporta os seguintes operadores aritmáticos que podem ser usados para executar cálculos nas instruções SQL.
Nome | Descrição |
---|---|
DIV | Divisão inteira |
/ | Divisão |
- | Subtração |
+ | Adição |
* | Multiplicação |
% ou MOD | Módulo |
Vejamos agora exemplos de cada um dos operadores acima
Divisão Inteira (DIV)
SELECT 23 DIV 6 ;
A execução do script acima nos dá os seguintes resultados.
3
Operador de divisão (/)
Vejamos agora o exemplo do operador de divisão. Modificaremos o exemplo DIV.
SELECT 23 / 6 ;
A execução do script acima nos dá os seguintes resultados.
3.8333
Operador de subtração (-)
Vejamos agora o exemplo do operador de subtração. Usaremos os mesmos valores dos dois exemplos anteriores
SELECT 23 - 6 ;
A execução do script acima nos dá 17
Operador de adição (+)
Vejamos agora o exemplo do operador de adição. Modificaremos o exemplo anterior.
SELECT 23 + 6 ;
A execução do script acima nos dá 29
Operador de multiplicação (*)
Vejamos agora o exemplo do operador de multiplicação. Usaremos os mesmos valores dos exemplos anteriores.
SELECT 23 * 6 AS `multiplication_result`;
A execução do script acima nos dá os seguintes resultados.
multiplicação_resultado |
---|
138 |
Operador de módulo (-)
O operador módulo divide N por M e nos dá o resto. Vejamos agora o exemplo do operador módulo. Usaremos os mesmos valores dos exemplos anteriores.
SELECT 23 % 6 ;
OR
SELECT 23 MOD 6 ;
A execução do script acima nos dá 5
Vejamos agora algumas das funções numéricas comuns em MySQL.
Andar – esta função remove casas decimais de um número e o arredonda para o número mais baixo mais próximo. O script mostrado abaixo demonstra seu uso.
SELECT FLOOR(23 / 6) AS `floor_result`;
A execução do script acima nos dá os seguintes resultados.
Resultado_de_piso |
---|
3 |
redondo – esta função arredonda um número com casas decimais para o número inteiro mais próximo. O script mostrado abaixo demonstra seu uso.
SELECT ROUND(23 / 6) AS `round_result`;
A execução do script acima nos dá os seguintes resultados.
Resultado_rodada |
---|
4 |
Fronteira – esta função é usada para gerar um número aleatório, seu valor muda toda vez que a função é chamada. O script mostrado abaixo demonstra seu uso.
SELECT RAND() AS `random_result`;
Funções armazenadas
As funções armazenadas são como funções integradas, exceto que você mesmo precisa definir a função armazenada. Depois que uma função armazenada for criada, ela poderá ser usada em instruções SQL como qualquer outra função. A sintaxe básica para criar uma função armazenada é mostrada abaixo
CREATE FUNCTION sf_name ([parameter(s)]) RETURNS data type DETERMINISTIC STATEMENTS
AQUI
- “CRIAR FUNÇÃO sf_name ([parâmetro(s)])“ é obrigatório e diz MySQL server para criar uma função chamada `sf_name' com parâmetros opcionais definidos entre parênteses.
- “Tipo de dados RETORNOS” é obrigatório e especifica o tipo de dados que a função deve retornar.
- “DETERMINISTA” significa que a função retornará os mesmos valores se os mesmos argumentos forem fornecidos a ela.
- "DECLARAÇÕES" é o código processual que a função executa.
Vamos agora dar uma olhada em um exemplo prático que implementa uma função interna. Suponha que queremos saber quais filmes alugados já passaram da data de retorno. Podemos criar uma função armazenada que aceita a data de retorno como parâmetro e então a compara com a data atual em MySQL servidor. Se a data atual for menor que a data de retorno do filme, retornamos “Não”, caso contrário, retornamos “Sim”. O script mostrado abaixo nos ajuda a conseguir isso.
DELIMITER | CREATE FUNCTION sf_past_movie_return_date (return_date DATE) RETURNS VARCHAR(3) DETERMINISTIC BEGIN DECLARE sf_value VARCHAR(3); IF curdate() > return_date THEN SET sf_value = 'Yes'; ELSEIF curdate() <= return_date THEN SET sf_value = 'No'; END IF; RETURN sf_value; END|
A execução do script acima criou a função armazenada `sf_past_movie_return_date`.
Vamos agora testar nossa função armazenada.
SELECT `movie_id`,`membership_number`,`return_date`,CURDATE() ,sf_past_movie_return_date(`return_date`) FROM `movierentals`;
Executando o script acima em MySQL workbench contra o myflixdb nos dá os seguintes resultados.
movie_id | membership_number | return_date | CURDATE() | sf_past_movie_return_date('return_date') |
---|---|---|---|---|
1 | 1 | NULL | 04-08-2012 | NULL |
2 | 1 | 25-06-2012 | 04-08-2012 | yes |
2 | 3 | 25-06-2012 | 04-08-2012 | yes |
2 | 2 | 25-06-2012 | 04-08-2012 | yes |
3 | 3 | NULL | 04-08-2012 | NULL |
Funções definidas pelo usuário
MySQL também suporta funções definidas pelo usuário que estendem MySQL. Funções definidas pelo usuário são funções que você pode criar usando uma linguagem de programação como C, C++ etc. e depois adicione-os a MySQL servidor. Uma vez adicionados, eles podem ser usados como qualquer outra função.
Resumo
- As funções nos permitem aprimorar as capacidades de MySQL.
- As funções sempre retornam um valor e podem opcionalmente aceitar parâmetros.
- Funções integradas são funções fornecidas com MySQL. Eles podem ser categorizados de acordo com os tipos de dados em que operam, ou seja, strings, data e funções numéricas integradas.
- Funções armazenadas são criadas pelo usuário dentro MySQL servidor e pode ser usado em instruções SQL.
- Funções definidas pelo usuário são criadas fora MySQL e pode ser incorporado em MySQL servidor.