Lição 5: Applying Built-in Scalar Functions


Olá pessoal!

Estou aqui mais uma vez “deitado” sobre o Trainning Kit estudando-o e pesquisando mais material na internet, o conteúdo de hoje é bem tranquilo de assimilar porém de uma grande importância no nosso dia-a-dia.

Bom proveito! 😀

O SQL Server 2008 nos prove um grande número de funções internas e podemos utilizá-las para aprimoras nossas queries.

Em muitos casos quando usamos uma função interna frequentemente logo após o nome da função adicionamos os “()” mesmo quando não temos nenhum parâmetro isso pode indicar para que o engine do banco utilize o valor atual, veremos alguns exemplos logo mais.

Bom. Vamos partir para a prática e ver um pouco do que o SQL Server 2008 nos proporciona, iremos ver alguns exemplos das funções mais utilizadas.

As primeiras que iremos ver serão as que trabalham com DATE e TIME.

As primeiras funções que iremos ver serão SYSDATETIME, SYSDATETIMEOFFSET, e SYSUTCDATETIME. todas as 3 nos retornam a hora. Elas são ideais caso tenhamos a necessidade de saber o horário preciso do sistema naquele momento.

Vejamos o exemplo:

SELECT SYSDATETIME() AS 'Hora Exata do Sistema', 'SYSDATETIME' AS 'Nome da Função'
UNION
SELECT SYSDATETIMEOFFSET(), 'SYSDATETIMEOFFSET'
UNION
SELECT SYSUTCDATETIME(), 'SYSUTCDATETIME'
Fig. 30 - Exemplo de utilização de funções Date/Time

Fig. 30 - Exemplo de utilização de funções Date/Time

Veja que o resultado foi exatamente igual e que para retornarmos a data e hora do sistema é extremamente simples, aproveitando o exemplo ainda colocamos o conceito de UNION que aprendemos na lição passada (Lição 4 – se tiver alguma dúvida volte uma lição e revise o conceito de UNION e suas regrinhas de funcionamento).

Agora se vc não tem a necessidade de tamanha precisão você pode utilizar as funções GETDATE, CURRENT_TIMESTAMP e GETDATE que ainda lhe proporciona um ganho de performance por retornar um conjunto de valores menor dos que as funções mostradas anteriormente.

Vejamos um mesmo modelo de exemplo:

SELECT GETDATE() AS 'Hora Exata do Sistema', 'GETDATE' AS 'Nome da Função'
UNION
SELECT CURRENT_TIMESTAMP, 'CURRENT_TIMESTAMP'
UNION
SELECT GETUTCDATE(), 'GETUTCDATE'
Fig. 31 - Mais funções Date/Time

Fig. 31 - Mais funções Date/Time

A única observação é a de que a função CURRENT_TIMESTAMP não necessita dos parenteses.

Agora se você tem a necessidade de apenas parte das informações podemos utilizar as funções DATEPART e DATENAME.

Vejamos alguns exemplos para melhorar explicar:

SELECT DATENAME(DAY, GETDATE()) AS 'Parte da data do Sistema', 'DATENAME' AS 'Nome da Função'
UNION
SELECT DATENAME(MONTH, GETDATE()), 'DATENAME'
UNION
SELECT (YEAR, GETDATE()), 'DATENAME'
Fig. 32 - Exemplo de uso da função DATENAME

Fig. 32 - Exemplo de uso da função DATENAME

Com o exemplo acima utilizando o DATENAME a informa que retorna é a especificada dentro da função, em especial quando solicitamos o mês o que nos é retornado é a string com o nome do mês corrente.

Vejamos agora um exemplo com DATEPART que tem a mesma função do exemplo anterior e o que difere as duas é que ela retorna apenas o valor numérico do mês e não mais a string.

SELECT DATEPART(DAY, GETDATE()) AS 'Parte da data do Sistema', 'DATEPART' AS 'Nome da Função'
UNION
SELECT DATEPART(MONTH, GETDATE()), 'DATEPART'
UNION
SELECT DATEPART(YEAR, GETDATE()), 'DATEPART'
Fig. 33 - Exemplo de uso da função DATEPART

Fig. 33 - Exemplo de uso da função DATEPART

Agora se quisermos adicionar alguns dias, meses ou anos devemos utilizar a função DATEADD, vejamos os exemplos.

 
SELECT DATEADD(YY, 5, GETDATE()) AS 'Resultado obtido'
       , 'DATEADD' AS 'Nome da função'
       , 'Adicionando 5 anos à partir da data atual' AS 'Observação'
UNION
SELECT DATEADD(DD, 25, GETDATE()), 'DATEADD', 'Adicionando 25 dias à partir da data atual'
UNION
SELECT DATEADD(MM, 8, GETDATE()), 'DATEADD', 'Adicionando 8 meses à partir da data atual'
Fig. 34 - Exemplo de uso de DATEADD

Fig. 34 - Exemplo de uso de DATEADD

Agora se quisermos o inverso, sabermos quanto tempo se passou, vejamos os seguintes exemplos:

SELECT DATEDIFF(YEAR, '1/21/1980', GETDATE()) AS 'Resultado obtido'
    , 'DATEIFF' AS 'Nome da função'
    , 'Quantidade em anos que tenho desde o meu nscimento' AS 'Observação'
UNION
SELECT DATEDIFF(DAY, '1/21/2001', GETDATE()), 'DATEIFF'
    , 'Quantidade em dias que tenho desde o meu nscimento'
UNION
SELECT DATEDIFF(MONTH, '1/21/2001', GETDATE()), 'DATEIFF'
     , 'Quantidade em meses que tenho desde o meu nscimento'
Fig. 35 - Exemplo de uso de DATEIFF

Fig. 35 - Exemplo de uso de DATEIFF

Já que estavamos tratando de hora e data, vamos dar uma olhada em uma função de sistema, apresentando-lhes a função CONVERT que nos auxilia convertendo os formatos de data e hora de acordo com a região e formato necessário.

Vejamos alguns exemplos:

SELECT CONVERT(VARCHAR(30), GETDATE()) AS 'Data', 'Estilo padrão' AS 'Descrição'
UNION
SELECT CONVERT(VARCHAR(30), GETDATE(),103), 'Estilo Britânico/Francês | dd/mm/aaaa'
UNION
SELECT CONVERT(VARCHAR(30), GETDATE(),111), 'Estilo Japonês | aa/mm/dd'
UNION
SELECT CONVERT(VARCHAR(30), GETDATE(),105), 'Estilo Italiano | dd-mm-aa'
Fig. 36 - Exemplo de uso de CONVERT

Fig. 36 - Exemplo de uso de CONVERT

Na tabela acima temos o formato que escolhemos para ser exibido e na segunda coluna a que região este padrão pertence seguido de uma máscara.

Veja tabela completa de estilos de formatação neste link: http://msdn.microsoft.com/pt-br/library/ms187928.aspx

String Functions

Vejamos agora as diversas funções que podemos utilizar para com strings.

  • Left – Retorna o número de caracteres que for definido na função, iniciando da esquerda
  • Right – Retorna o número de caracteres que for definido na função, iniciando da direita
  • Upper – Retorna a string toda em maiúscula
  • Lower – Retorna a string toda em minúscula
  • Substring – Com esta função vc determina de que ponto a que ponto deve-se retornar o trecho da string
  • Replace – Pesquisa dentro de uma string um conjunto de caracteres e substitui por outro que definimos
  • RTrim – Remove os espaços em branco à direita de uma string
  • LTrim – Remove os espaços em branco à esquerda de uma string

Vamos aos exemplos:

SELECT LEFT('Estudando para 70-433',5) AS 'Resultado Obtido', 'LEFT' AS 'Função'
UNION
SELECT RIGHT('Estudando para 70-433',5), 'RIGHT'
UNION
SELECT UPPER('Estudando para 70-433'), 'UPPER'
UNION
SELECT LOWER('Estudando para 70-433'), 'LOWER'
UNION
SELECT SUBSTRING('Estudando para 70-433',3,5), 'SUBSTRING'
UNION
SELECT REPLACE('Preparando para 70-433','Preparando','Estudando'), 'REPLACE'
UNION
SELECT RTRIM('Preparando para 70-433         '), 'RTRIM'
UNION
SELECT LTRIM('         Preparando para 70-433'), 'LTRIM'
Fig. 37 - Exemplo com funções de uso com String

Fig. 37 - Exemplo com funções de uso com String

E assim chegamos ao fim de mais uma Lição espero que tenham aproveitado e assimilado bem os conceitos, pois daqui para a frente eles serão essencias para as demais Lições visto que estaremos nos aprofundando cada vez mais e sempre que possível mesclando dois ou mais dos conceitos destas primeiras Lições.

Grande abraço, sucesso e nos encontramos no próximo post. 😉

Lucas A. Romão

Anúncios

One Response to Lição 5: Applying Built-in Scalar Functions

  1. gesilenemartins disse:

    Olá Lucas!

    Excelente post, parabéns!
    Muitas pessoas poderão ser ajudadas assim.

    Forte abraço.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: