SQL Server 2012 . Novas funções . String e Date
Dando continuidade com as novas funções
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

Related articles
Short: SQL Update using begin try and begin transaction
Commit and Rollback command
Getting the last 120 months of data from my database
how to do it in SQL language?
How to create a variable to use the IN clause SELECT query SQL?
Database code part
Ozimar Henrique