Dando continuidade com as novas funções do SQL Server 2012, neste post veremos funções de String e Date.
1) STRING FUNCTIONS
1.1) CONCAT - Resulta a concatenação de vários argumentos
Criação do Ambiente de Teste:
Create table Funcoes
(
Codigo int identity primary key,
Nome varchar(50),
Sobrenome varchar(50)
)
INSERT INTO Funcoes VALUES('José','Antonio'), ('Maria','Silva'), ('Pedro','Souza'), ('Carlos',NULL), ('João',NULL)
GO
Antes utilizávamos o operador "+" para concatenar, ficava desta forma:
Select 'Nome Completo: ' + Nome + ' ' + Sobrenome + '- Data: ' + convert(varchar,GETDATE()) as Coluna from Funcoes
Porém, ao concatenar com NULL ele retorna NULL.
Para corrigir isto, vamos utilizar o comando CONCAT_NULL_YIELDS_NULL.
SET CONCAT_NULL_YIELDS_NULL OFF -- Para concatenar com nulo
Select 'Nome Completo: ' + Nome + ' ' + Sobrenome + '- Data: ' + convert(varchar,GETDATE()) as Coluna from Funcoes
Agora podemos o utilizar a função CONCAT, além de ficar mais limpo, não foi preciso conversão e nem configurar o CONCAT_NULL_YIELDS_NULL.
Select CONCAT('Nome Completo: ', Nome, ' ', Sobrenome, '- Data: ', GETDATE()) Coluna from Funcoes
1.2) FORMAT - Mais uma alternativa para o Convert e o Cast. Utiliza a cultura do .Net Framework.
Neste exemplo formateremos com o parâmetro "d"(Data) e o "c"(Moeda)
Declare @Hoje date = getdate()
Select Format(@Hoje, 'd', 'en-us')
Select Format(@Hoje, 'd', 'pt-br')
Declare @Valor money = 100
Select Format(@Valor, 'c', 'en-us')
Select Format(@Valor, 'c', 'pt-br')
Select Format(@Valor, 'c', 'fr-fr')
2) DATE AND TIME FUNCTIONS
2.1) DATEFROMPARTS - Monta uma data. Parâmetros: (YEAR, MONTH, DAY)
SELECT DATEFROMPARTS(2012,4,11) as DATEFROMPARTS
2.2) TIMEFROMPARTS - Monta uma hora completa. Parâmetros: (HOUR, MINUTE, SECONDS, FRACTIONS, PRECISION)
O Parâmetro FRACTIONS depende de PRECISION. A quantidade de dĂgitos do FRACTIONS deve ser igual ao valor de PRECISION.
SELECT TIMEFROMPARTS(18, 16, 32, 300, 3) as TIMEFROMPARTS
2.3) DATETIMEFROMPARTS - Monta uma data/hora completa. Parâmetros: (YEAR, MONTH, DAY, HOUR, MINUTE, SECONDS, MILLISECONDS)
SELECT DATETIMEFROMPARTS(2011,3,25,21,5,32,122) as DATETIMEFROMPARTS
2.4) SMALLDATETIMEFROMPARTS - Monta uma data/hora. Parâmetros: (YEAR, MONTH, DAY, HOUR, MINUTE)
SELECT SMALLDATETIMEFROMPARTS(2012,6,4,14,35) as SMALLDATETIMEFROMPARTS
2.5) DATETIME2FROMPARTS - Monta uma data/hora completa Parâmetros: (YEAR, MONTH, DAY, HOUR, MINUTE, SECONDS, FRACTIONS, PRECISION)
SELECT DATETIME2FROMPARTS(2012,4,11,18, 16, 32, 300, 3) as DATETIME2FROMPARTS
2.6) DATETIMEOFFSETFROMPARTS - Monta uma data/hora completa com Fuso Horário. Parâmetros: (YEAR, MONTH, DAY, HOUR, MINUTE, SECONDS, FRACTIONS, HOUR_OFFSET, MINUTE_OFFSET, PRECISION)
SELECT DATETIMEOFFSETFROMPARTS(2012,4,11,18, 16, 32, 300, 3,30,3) as DATETIMEOFFSETFROMPARTS
2.7) EOMONTH - Retorna o último dia de um mês. Parâmetros: (START_DATE, [, MONTH_TO_ADD ])
SELECT EOMONTH (Getdate()) AS EsteMes, EOMONTH (Getdate(), 1) AS ProximoMes, EOMONTH (Getdate(), -1) AS MesAnterior